我有这个代码,例如
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。
我希望我表达自己可以理解,因为英语不是我的第一语言:-)
答案 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中都会发生变化,但你想要做的事实上可能会得到支持。