【发布时间】:2011-10-06 16:44:28
【问题描述】:
我有一个带有以下签名的基类
public class ReportViewModelBaseDTO<VT,DT>
以及像这样的具体类
public class ChartViewModelDTO:ReportViewModelBaseDTO<ChartViewModel,ChartViewModelDTO>
我的问题是,我知道我的泛型基类的第二个类型参数应该是具体类的类型。我不想通过命名类然后重复该名称作为类型参数来重复自己。
有没有办法让我的通用基类将实际的具体类作为类型参数?有人对更好的方法有什么建议吗?
编辑:
我想如何使用 DT 的示例如下。我通过 Automapper 从 VT 类型之一创建了一个 DT 类型的实例。
public static DT Create(VT viewModel)
{
return Mapper.Map<VT,DT>(viewModel);
}
【问题讨论】:
-
你能提供一个你想如何使用DT的用例吗?基类需要知道它是哪个具体实现的基类,这感觉有点奇怪。我可以看到一些用途(例如从方法返回正确的类型),但不是很多。
-
C# 无法强制执行您似乎想要的要求,将基类的泛型 T 强制为派生类的类型。请参阅this related question 了解更多信息。
标签: c# .net generics inheritance