2013-03-27 58 views
1

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

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.. 
} 

然后,我有一个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>) 
    } 
} 

有没有什么办法可以完成那个..?

+0

是不是 “公共BaseClass的 LoadBaseClass 其中T:类” 是你想要什么? – Blablablaster 2013-03-27 22:50:20

回答

4

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

public TBaseClass LoadBaseClass<TBaseClass, TItem>() 
    where TBaseClass : BaseClass<TItem>, new() 
    where TItem : class 
{ 
    return new TBaseClass(); 
} 

用法:

SomeInherit<Foo> result = LoadBaseClass<SomeInherit<Foo>, Foo>();