Реализация универсальных методов - 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"; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д