首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >泛型的泛型

泛型的泛型
EN

Stack Overflow用户
提问于 2013-03-28 06:47:04
回答 1查看 357关注 0票数 1

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
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>)
   }
}

有什么方法可以做到这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-28 06:50:56

您需要为where T : BaseClass<???>定义第二个类型参数。

可以使用the new() constraint允许该方法创建泛型类型的实例。

代码语言:javascript
复制
public TBaseClass LoadBaseClass<TBaseClass, TItem>()
    where TBaseClass : BaseClass<TItem>, new()
    where TItem : class
{
    return new TBaseClass();
}

用法:

代码语言:javascript
复制
SomeInherit<Foo> result = LoadBaseClass<SomeInherit<Foo>, Foo>();
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15671007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档