以下片段无法编译。出现以下错误:
Cannot implicitly convert type 'Container<ChildClass>' to 'Container<BaseClass>'
class BaseClass {}
class ChildClass : BaseClass {}
class Container<T> where T : BaseClass {}
class Program {
static void Main() {
// why doesn't this work?
Container<BaseClass> obj = new Container<ChildClass>();
}
}
这是设计使然吗?如果是,原因是什么?
最佳答案
(制作维基,以防重复)
C# (3.0) 不支持列表的协方差等。C# 4.0 将支持有限 [co|contra]方差,但是still not lists .
问题在于:
Container<BaseClass> obj = new Container<ChildClass>();
我能做到:
obj.Add(new SomeOtherSubclass()); // SomeOtherSubclass : BaseClass
可以编译,但不能工作。
数组支持此行为,但主要是出于历史原因。
关于C#:没有从 Class<Child> 到 Class<Base> 的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/981570/