C# 使用混凝土类作为继承泛型基类的类型参数

C# 使用混凝土类作为继承泛型基类的类型参数,c#,.net,generics,inheritance,C#,.net,Generics,Inheritance,我有一个具有以下签名的基类 public class ReportViewModelBaseDTO<VT,DT> 公共类ReportViewModelBaseDTO 还有像这样的具体课程 public class ChartViewModelDTO:ReportViewModelBaseDTO<ChartViewModel,ChartViewModelDTO> 公共类ChartViewModelDTO:ReportViewModelBaseDTO 我的问题是,我知

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

public class ReportViewModelBaseDTO<VT,DT>
公共类ReportViewModelBaseDTO
还有像这样的具体课程

public class ChartViewModelDTO:ReportViewModelBaseDTO<ChartViewModel,ChartViewModelDTO>
公共类ChartViewModelDTO:ReportViewModelBaseDTO
我的问题是,我知道泛型基类的第二个类型参数应该是具体类的类型。我不想通过命名类,然后重复该名称作为类型参数,一直重复我自己

有没有办法让我的泛型基类将实际的混凝土类作为类型参数?有人对更好的方法有什么建议吗

编辑:

下面是我想如何使用DT的一个例子。我从VT类型到Automapper类型创建了一个DT类型的实例

public static DT Create(VT viewModel)
        {
            return Mapper.Map<VT,DT>(viewModel);   
        }
公共静态DT创建(VT视图模型)
{
返回Mapper.Map(viewModel);
}
这就是你的意思吗

public class ReportViewModelBaseDTO<VT,DT> where DT : ReportViewModelBaseDTO<VT,DT>

你能提供一个你想如何使用DT的用例吗?基类需要知道它是哪个具体实现的基类,这感觉有点奇怪。我可以看到一些用法(例如,从方法返回正确的类型),但不多。C#没有办法强制执行您似乎要执行的要求,强制将基类的泛型T作为派生类的类型。更多信息,请参阅。它是否知道,或者只是假设?考虑<代码>类动物,其中T:动物{类猫:动物{}类狗:动物{} /代码>这是合法的。C#没有强制执行只有Cat才能从
动物继承的方法。不完全是这样,我想让我的基类知道派生类是什么类型,这样我就可以在返回方法中使用该类型,例如我的editMake Map generic中的方法,即Mapper.Map(…),然后让Map返回正确的类型。Lerxst。。。GetType()将返回类的类型(不是基类)。。。ie公共类Cat:Animal{…}任何调用GetType的代码都将返回Cat作为类型。这是我打算做的,但是该方法是静态的,所以我不能使用GetType()
public static DT Create(VT viewModel)
{
  return Mapper.Map<VT, DT>(viewModel);   
}
private U Map<T, U>(ViewModel viewModel) where U : ReportViewModelBaseDTO<T,U>{...}