Каков наилучший способ использовать соответствующий шаблон (переключатель) в заводских методах - PullRequest
0 голосов
/ 03 ноября 2019

Я хочу создать объекты с использованием таких конструкций:

IProduct product1 = creator.CreateProduct<ConcreteProduct1>();
IProduct product2 = creator.CreateProduct<ConcreteProduct2>();

Моя версия метода CreateProduct выглядит следующим образом:

public T CreateProduct<T>()
        where T: IProduct, new()
    {
        switch (typeof(T))
        {
            case(...) return new ConcreteProduct1;
            case(...) return new ConcreteProduct2;
        }
    }

Моя проблема в том, что я незнать, как использовать соответствующий шаблон в этом случае. Я попробовал несколько вариантов:

case (typeof(ConcreteProduct1)): return new ConcreteProduct1;
case (ConcreteProduct1 c): return new ConcreteProduct1;

Но все они не работают.

Какие выражения я должен использовать в операторах case? Или какие еще варианты у меня есть для реализации этого метода?

1 Ответ

1 голос
/ 03 ноября 2019

Если ConcreteProduct1 и ConcreteProduct2 реализуют IProduct, вам не нужны никакие выражения переключения, просто простое возвращение нового экземпляра (поскольку вы передаете требуемый тип как параметр универсального типа T и ограничение универсального типа дляконструктор без параметров)

public T CreateProduct<T>()
        where T: IProduct, new()
    {
        return new T();
    }
...