Реализация универсальных методов - C#
Формулировка задачи:
Здравствуйте и простите, я не очень давно занимаюсь C#. Подскажите идеи, как реализовать такие универсальные методы:
Есть например 2 неймспейса
В главном модуле подключаются оба примерно так:
Ну и в коде частенько приходится вызывать такие конструкции типа
хочется реализовать что-то подобное:
И потом использовать везде:
Но так ругается, говорит нельзя 2 класса в where T: n1.xxx, n2.xxx.
Суть в том, что каждый неймспейс - это куча классов, которые описывают логику работы с определенным сервисом (WCF),
таких сервисов несколько. Как можно реализовать метод или другие какие-либо идеи, что бы убрать повторяющийся код.
namespace x.y
{
public class xxx
{
public string a;
public string b;
}
public class service
{
public xxx zzz;
}
}
namespace x.z
{
public class xxx
{
public string a;
public string b;
}
...
//тоже самое что и в первом
}using n1 = x.y; using n2 = x.z;
a = new n1.service
{
zzz = new n1.xxx
{
a=1,
b=1
}
}
b = new n2.service
{
zzz = new n2.xxx
{
a=1,
b=1
}
}public void SetAB<T>(ref T service) where T: n1.xxx, n2.xxx
{
service.a = 1
service.b = 1
}a.zzz = new n1.xxx(); SetAB<n1.xxx>(ref a.zzz);
Решение задачи: «Реализация универсальных методов»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace X.Service
{
public interface IAdapter
{
string A { get; set; }
string B { get; set; }
}
public class Service<T> where T : IAdapter
{
private IAdapter _xxx;
public Service(T adaptee)
{
_xxx = adaptee;
}
}
}
namespace x.y
{
public class xxx : X.Service.IAdapter
{
private string a;
private string b;
public string A
{
get
{
return a;
}
set
{
a = value;
}
}
public string B
{
get
{
return b;
}
set
{
b = value;
}
}
}
}
namespace x.z
{
public class xxx : X.Service.IAdapter
{
private string a;
private string b;
public string A
{
get
{
return a;
}
set
{
a = value;
}
}
public string B
{
get
{
return b;
}
set
{
b = value;
}
}
}
}
namespace ServiceAdapter
{
class Program
{
static void Main(string[] args)
{
var a = new x.y.xxx();
SetAB(a);
Console.WriteLine(a.A + " " + a.B);
Console.ReadKey();
}
public static void SetAB(X.Service.IAdapter adaptee)
{
adaptee.A = "1";
adaptee.B = "1";
}
}
}