微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#:没有从Class转换为Class

以下代码片段无法编译.出现以下错误

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 举报,一经查实,本站将立刻删除。

相关推荐