使用具体类作为继承的泛型基类的类型参数
本文关键字:继承 泛型 基类 类型参数 | 更新日期: 2023-09-27 18:10:48
我有一个基类,其签名如下
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);
}
你是这个意思吗?
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>{...}