这是CLR的限制还是现有代码存在兼容性问题?
这与C#4.0中委托合并的混乱变化有关吗?
编辑: 在CLR上运行没有限制的共同/逆变语言是否可能?
这是CLR的限制还是现有代码存在兼容性问题?
这与C#4.0中委托合并的混乱变化有关吗?
编辑: 在CLR上运行没有限制的共同/逆变语言是否可能?
简单回答:这是一个CLR限制。
(我没有 看到 对于这个任何地方都有一个好的,具体的解释......我不记得在Eric的博客系列中看过一个关于它的内容,尽管我可能在某个地方错过了它。)
有一点我 将 说是代表和接口已经形成了真实类型的“间接层”;如果愿意,可以查看方法或类。从一个视图转换到另一个视图是相当合理的。对于我来说,实际的阶级感觉就像是一个更具体的表现 - 从一个具体的表现形式转移到另一个具体表现形式感觉不太合这是一个非常敏感的解释,而不是真正的技术限制。
您将要阅读Eric Lippert关于它为何如此工作的帖子。缺点是它们允许尽可能多的差异,而不允许开发人员在编程中犯下可能导致难以追踪错误的错误。 4.0中的差异量大大超过了3.0规则,从我的理解中,它是对开发人员有利的东西和允许安全的东西之间的平衡,而不会因为无意的错误而引起太多的麻烦。
http://blogs.msdn.com/b/ericlippert/archive/tags/covariance+and+contravariance/default.aspx
这是CLR的限制。看到 为什么C#(4.0)不允许泛型类型中的共同和逆变? 进一步评论。