重复
  
  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_sampleIBindingList<SampleBase>定义为IBindingList<out T>,将是这样。

10-08 04:14