泛型的泛型

bit*_*bit 1 c# generics

我有一个泛型基类,其中泛型类型是类和其他相关的继承类:

public class BaseClass<T> where T : class 
{
   virtual void DoWork(){..}
   virtual void DoAnotherWork(){..}
}

public class SomeInherit<Person> : BaseClass<Person>
{
   //...
}

public class OtherInherit<Car> : BaseClass<Car>
{
   // override something..
}
Run Code Online (Sandbox Code Playgroud)

然后,我有一个 BaseClassManager,它应该能够通过反射加载一些同事继承的一些 BaseClass:

public class BaseClassManager
{
   public BaseClass<TItem> LoadBaseClass<T>() where T : BaseClass<???>
   {
      //  how can create an instance of T?
      //  TItem : class
      //  T : BaseClass
      //  -------------> in reality, it should be: T<TItem> (just as BaseClass<Person>)
   }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点..?

dtb*_*dtb 5

您需要为 定义第二个类型参数where T : BaseClass<???>
您可以使用new()约束,以允许该方法创建一个通用型的实例。

public TBaseClass LoadBaseClass<TBaseClass, TItem>()
    where TBaseClass : BaseClass<TItem>, new()
    where TItem : class
{
    return new TBaseClass();
}
Run Code Online (Sandbox Code Playgroud)

用法:

SomeInherit<Foo> result = LoadBaseClass<SomeInherit<Foo>, Foo>();
Run Code Online (Sandbox Code Playgroud)