【问题标题】:Using generics to specify the concrete and base type in .NET 3.5在 .NET 3.5 中使用泛型指定具体类型和基本类型
【发布时间】:2011-03-22 21:57:34
【问题描述】:

我创建了一个通用方法,它使客户端能够将返回实例的具体类型和实际返回类型(例如接口)指定为独立的类型参数.当然,具体返回的实例类型参数被限制为从实际返回的类型继承。

这个想法是您可以从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);
    }

如果有人能理解这一切,我想知道是否有人可以分享关于泛型接口中具体类型与返回类型的分离,以及这是否值得努力。

【问题讨论】:

  • 这看起来像是工厂工厂的一部分(discuss.joelonsoftware.com/default.asp?joel.3.219431.12)。
  • 如果你的函数中只有一个类型为 TDestination 的参数(或一些以 TDestination 作为泛型参数的泛型类型),那么编译器可能会让你调用该函数而无需显式指定泛型参数的类型(假设它可以从你的参数中推断出类型)。
  • ...这可能使它几乎可用。我会研究修改它。

标签: c# generics .net-3.5 c#-3.0


【解决方案1】:

我很确定我理解它,但我不确定它是否值得这样做。与仅在调用方转换为接口(或分配给接口类型的变量)相比,它是否提供了很多好处?我想它鼓励你考虑使用接口而不是具体类型......但它仍然不会强制执行:调用者可以只指定相同的类型两次。

【讨论】:

  • 我同意好处可能是微不足道的。绝对是主观的。我只是喜欢根据接口定义接口的能力。我认为即使是 .NET 4 协方差也不会帮助我。
猜你喜欢
  • 1970-01-01
  • 2018-09-20
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多