我有一个带有以下签名的基类
public class ReportViewModelBaseDTO<VT,DT>
和像这样的具体类
public class ChartViewModelDTO:ReportViewModelBaseDTO<ChartViewModel,ChartViewModelDTO>
我的问题是,我知道我的通用基类的第二个类型参数应该是具体类的类型。我不想一直重复自己命名类,然后重复该名称作为类型参数。
有没有办法让我的通用基类将实际的具体类作为类型参数?有没有人对更好的方法有任何建议?
编辑:
我想如何使用DT的一个例子如下。我从类型VT thru Automapper之一创建DT类型的实例。
public static DT Create(VT viewModel)
{
return Mapper.Map<VT,DT>(viewModel);
}
答案 0 :(得分:1)
这是你的意思吗?
public class ReportViewModelBaseDTO<VT,DT> where DT : ReportViewModelBaseDTO<VT,DT>
现在你的类'知道'第二个类型参数是它自己的具体实现。
对于您的示例方法,您可以这样做:
public static DT Create(VT viewModel)
{
return Mapper.Map<VT, DT>(viewModel);
}
并将Mapper.Map
定义为:
private U Map<T, U>(ViewModel viewModel) where U : ReportViewModelBaseDTO<T,U>{...}