使用具体类作为继承的泛型基类的类型参数

本文关键字:继承 泛型 基类 类型参数 | 更新日期: 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>{...}