THX*_*138 3 c# generics inheritance language-features language-design
以下代码片段无法编译.出现以下错误:
无法将类型'Container <ChildClass>'隐式转换为'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>();
}
}
Run Code Online (Sandbox Code Playgroud)
这是设计的吗?如果是,那是什么原因?
Mar*_*ell 14
(制作wiki,如果有重复)
C#(3.0)不支持列表等的协方差.C#4.0将支持有限的 [co | contra]方差,但仍不支持列表.
问题是:
Container<BaseClass> obj = new Container<ChildClass>();
Run Code Online (Sandbox Code Playgroud)
我可以:
obj.Add(new SomeOtherSubclass()); // SomeOtherSubclass : BaseClass
Run Code Online (Sandbox Code Playgroud)
哪个会编译,但不会工作.
这种行为是支持数组,但主要是出于历史原因.
| 归档时间: |
|
| 查看次数: |
2005 次 |
| 最近记录: |