Использование обобщений для указания конкретного и базового типа в .NET 3.5 - PullRequest
1 голос
/ 29 июля 2010

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

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

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

Код:

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 Ответ

2 голосов
/ 29 июля 2010

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

...