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

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

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

Здравствуйте и простите, я не очень давно занимаюсь C#. Подскажите идеи, как реализовать такие универсальные методы: Есть например 2 неймспейса
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);
Но так ругается, говорит нельзя 2 класса в where T: n1.xxx, n2.xxx. Суть в том, что каждый неймспейс - это куча классов, которые описывают логику работы с определенным сервисом (WCF), таких сервисов несколько. Как можно реализовать метод или другие какие-либо идеи, что бы убрать повторяющийся код.

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

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";
        }
    }
}

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


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

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

9   голосов , оценка 4.333 из 5
Похожие ответы