Duplicate
这是我的代码:
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>
使用(虚构的)协变接口(interface) IBindingList<out T>
.
关于c# - C# 中的继承 - 简单问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1180569/