我有一个泛型基类,其中泛型类型是类和其他相关的继承类:
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)
有没有办法做到这一点..?
您需要为 定义第二个类型参数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)
| 归档时间: |
|
| 查看次数: |
339 次 |
| 最近记录: |