Реализация универсальных методов - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте и простите, я не очень давно занимаюсь C#. Подскажите идеи, как реализовать такие универсальные методы: Есть например 2 неймспейса
Листинг программы
  1. namespace x.y
  2. {
  3. public class xxx
  4. {
  5. public string a;
  6. public string b;
  7. }
  8. public class service
  9. {
  10. public xxx zzz;
  11. }
  12. }
  13. namespace x.z
  14. {
  15. public class xxx
  16. {
  17. public string a;
  18. public string b;
  19. }
  20. ...
  21. //тоже самое что и в первом
  22. }
В главном модуле подключаются оба примерно так:
Листинг программы
  1. using n1 = x.y;
  2. using n2 = x.z;
Ну и в коде частенько приходится вызывать такие конструкции типа
Листинг программы
  1. a = new n1.service
  2. {
  3. zzz = new n1.xxx
  4. {
  5. a=1,
  6. b=1
  7. }
  8. }
  9. b = new n2.service
  10. {
  11. zzz = new n2.xxx
  12. {
  13. a=1,
  14. b=1
  15. }
  16. }
хочется реализовать что-то подобное:
Листинг программы
  1. public void SetAB<T>(ref T service) where T: n1.xxx, n2.xxx
  2. {
  3. service.a = 1
  4. service.b = 1
  5. }
И потом использовать везде:
Листинг программы
  1. a.zzz = new n1.xxx();
  2. SetAB<n1.xxx>(ref a.zzz);
Но так ругается, говорит нельзя 2 класса в where T: n1.xxx, n2.xxx. Суть в том, что каждый неймспейс - это куча классов, которые описывают логику работы с определенным сервисом (WCF), таких сервисов несколько. Как можно реализовать метод или другие какие-либо идеи, что бы убрать повторяющийся код.

Решение задачи: «Реализация универсальных методов»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7.  
  8. namespace X.Service
  9. {
  10.     public interface IAdapter
  11.     {
  12.         string A { get; set; }
  13.         string B { get; set; }
  14.     }
  15.  
  16.     public class Service<T> where T : IAdapter
  17.     {
  18.         private IAdapter _xxx;
  19.  
  20.         public Service(T adaptee)
  21.         {
  22.             _xxx = adaptee;
  23.         }
  24.     }
  25. }
  26.  
  27. namespace x.y
  28. {
  29.     public class xxx : X.Service.IAdapter
  30.     {
  31.         private string a;
  32.         private string b;
  33.  
  34.         public string A
  35.         {
  36.             get
  37.             {
  38.                 return a;
  39.             }
  40.             set
  41.             {
  42.                 a = value;
  43.             }
  44.         }
  45.  
  46.         public string B
  47.         {
  48.             get
  49.             {
  50.                 return b;
  51.             }
  52.             set
  53.             {
  54.                 b = value;
  55.             }
  56.         }
  57.     }
  58. }
  59.  
  60. namespace x.z
  61. {
  62.     public class xxx : X.Service.IAdapter
  63.     {
  64.         private string a;
  65.         private string b;
  66.  
  67.         public string A
  68.         {
  69.             get
  70.             {
  71.                 return a;
  72.             }
  73.             set
  74.             {
  75.                 a = value;
  76.             }
  77.         }
  78.  
  79.         public string B
  80.         {
  81.             get
  82.             {
  83.                 return b;
  84.             }
  85.             set
  86.             {
  87.                 b = value;
  88.             }
  89.         }
  90.     }
  91.  
  92. }
  93. namespace ServiceAdapter
  94. {
  95.     class Program
  96.     {
  97.         static void Main(string[] args)
  98.         {
  99.             var a = new x.y.xxx();
  100.             SetAB(a);
  101.  
  102.             Console.WriteLine(a.A + " " + a.B);
  103.             Console.ReadKey();
  104.         }
  105.  
  106.         public static void SetAB(X.Service.IAdapter adaptee)
  107.         {
  108.             adaptee.A = "1";
  109.             adaptee.B = "1";
  110.         }
  111.     }
  112. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы