Шаблон для создания универсальных объектов - PullRequest
0 голосов
/ 01 марта 2019

Может кто-нибудь помочь с лучшим способом возврата конкретной реализации в следующих сценариях.Скажем, у меня есть:

public interface IThing<TInput> where TInput : RequestBase
{
    string Process(T input);
}

А затем несколько реализаций:

public class Thing1<T> : IThing<T> where T : ReqThing1
public class Thing2<T> : IThing<T> where T : ReqThing2

В моем классе вызова, каков наилучший способ обернуть конструкцию этих классов и вернуть нужный мне IThingчистым, проверяемым способом?Спасибо

1 Ответ

0 голосов
/ 01 марта 2019

Я не совсем понимаю, что вы хотите, но вот идея:

public abstract class RequestBase
{
}

public class ReqThing1 : RequestBase
{
}

public class ReqThing2 : RequestBase
{
}

public interface IThing<T> where T : RequestBase
{
    string Process(T input);
}

public class Thing1 : IThing<ReqThing1>
{
    public string Process(ReqThing1 input)
    {
        throw new System.NotImplementedException();
    }
}

public class Thing2 : IThing<ReqThing2>
{
    public string Process(ReqThing2 input)
    {
        throw new System.NotImplementedException();
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        var thing1 = new Thing1();
        var thing2 = new Thing2();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...