重复
In C#, why can’t a List object be stored in a List variable
这是我的代码:
public class Base
{
protected BindingList<SampleBase> m_samples;
public Base() { }
}
public class Derived : Base
{
public Derived()
{
m_samples = new BindingList<SampleDerived>();
}
}
SampleDerived派生自SampleBase
根据继承逻辑,我应该能够做到这一点。但是,它无法编译-错误表明无法将SampleBase隐式转换为SampleDerived类型。是什么赋予了?
我正在使用C#2.0
最佳答案
您正在尝试使用协方差,C#3.0和更早版本不支持此协方差(但在C#4.0中会支持)。您仍然可以将SampleDerived
类型的对象添加到m_samples
,但是列表的通用类型将需要为SampleBase
。
编辑:所以Pavel是正确的,C#4.0实际上对此没有帮助。如果使用(虚构的)协变接口m_sample
将IBindingList<SampleBase>
定义为IBindingList<out T>
,将是这样。