Используя дженерики для определения конкретного и базового типа в.NET 3.5

Я создал общий метод, который позволяет клиентам указать и конкретный тип возвращенного экземпляра и фактический возвращенный тип (например, интерфейс) как независимые параметры типа. Естественно, бетон возвратился, параметр типа экземпляра вынужден наследоваться фактическому возвращенному типу.

Идея состоит в том, что можно возвратить интерфейс из IFactory (объектная фабрика) Create метод. Шпора для этого безумия была то, что AutoMapper должен знать, какой конкретный тип инстанцировать на фабрике создают метод, и я определил бы возвращаемое значение фабрики с точки зрения интерфейса.

К сожалению, Вы заканчиваете с вполне смехотворно долгой сигнатурой метода.

Код:

public static TDestinationBase 
  MapToDomain<TSource, TDestinationBase, TDestination>
    (this TSource source, IFactory<TSource, TDestinationBase> factory) 
      where TSource : IMappable<TDestination>, IDto 
      where TDestination : TDestinationBase
    {
        return factory.Create<TDestination>(source);
    }

Если кто-либо может понять все это, интересно, есть ли у кого-либо что-нибудь, что они могут совместно использовать относительно разделения конкретного типа от возвращенного типа в универсальных интерфейсах, и является ли это во всем стоящим усилием.

1
задан Ben 29 July 2010 в 18:58
поделиться

1 ответ

Я почти уверен, что понимаю это, но не уверен, что это стоит делать. Предоставляет ли это много преимуществ по сравнению с простым приведением к интерфейсу (или присвоением переменной типа интерфейса) на вызывающей стороне? Я полагаю, это побуждает вас подумать об использовании интерфейса вместо конкретного типа ... но он все равно не будет обеспечивать это: вызывающий может просто указать один и тот же тип дважды.

2
ответ дан 2 September 2019 в 22:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: