使用Concrete类作为继承的通用基类的类型参数

时间:2011-10-06 16:44:29

标签: c# .net generics inheritance

我有一个带有以下签名的基类

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);   
        }

1 个答案:

答案 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>{...}