如何处理通用继承

时间:2009-12-28 14:14:20

标签: c# generics inheritance

我有这个代码,例如

public class BaseClass
{}

public class DerivedClass1 : BaseClass
{}

public class DerivedClass2 : BaseClass
{ }

public class DerivedClass3 : BaseClass
{ }

public class GenericBaseClass<T> where T : BaseClass
{
    public List<T> collection { get; set; }
}

现在我想创建一个新类,它将继承自GenericBaseClass<T>,并且在这个类中有某种集合List。

这种方式甚至可能吗? 因为List<BaseClass> = new List<DerivedCLass3>();无效。

或者实现此目的的唯一方法是从collection中删除GenericBaseClass属性,并直接在派生类中添加集合List。

我希望我表达自己可以理解,因为英语不是我的第一语言:-)

2 个答案:

答案 0 :(得分:2)

public class GenericBaseClass<T> where T : BaseClass
{
    public List<T> collection { get; set; }
}

public class GenericDerivedClass1 : GenericBaseClass<DerivedClass1>
{
    // Here the collection property will be of type List<DerivedClass1>
}

答案 1 :(得分:0)

您的示例代码无法编译的原因是协方差。 .Net无法处理比自身更不具体的类的自动类型。我相信这在.Net 4.5中都会发生变化,但你想要做的事实上可能会得到支持。

Covariance and contravariance (computer science)