以下代码片段无法编译.出现以下错误:
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>(); } }
这是设计的吗?如果是,那是什么原因?
解决方法
(制作wiki,如果有重复)
C#(3.0)不支持列表等的协方差.C#4.0将支持有限的[co | contra]方差,但是still not lists.
问题是:
Container<BaseClass> obj = new Container<ChildClass>();
我可以:
obj.Add(new SomeOtherSubclass()); // SomeOtherSubclass : BaseClass
哪个会编译,但不会工作.
阵列支持此行为,但主要是出于历史原因.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。