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