这是 CLR 的限制还是与现有代码存在兼容性问题?
这与 C# 4.0 中委托组合的混乱变化有关吗?
编辑:是否有可能在 CLR 上运行不受限制的使用协变/逆变的语言?
这是 CLR 的限制还是与现有代码存在兼容性问题?
这与 C# 4.0 中委托组合的混乱变化有关吗?
编辑:是否有可能在 CLR 上运行不受限制的使用协变/逆变的语言?
您将需要阅读 Eric Lippert 的文章,了解它为何如此运作。不足之处在于它们允许尽可能多的差异,而不允许开发人员在编程中犯下可能导致难以追踪错误的严重错误。与 3.0 规则相比,4.0 中的差异量大大扩展,据我了解,这是在对开发人员有利的内容和安全允许的内容之间取得平衡,而不会因无意的错误而引起太多麻烦。
http://blogs.msdn.com/b/ericlippert/archive/tags/covariance+and+contravariance/default.aspx
简单的回答:这是 CLR 限制。
(我在任何地方都没有看到一个好的、具体的解释......我不记得在 Eric 的博客系列中看到过一个关于它的内容,尽管我很可能在某个地方错过了它。)
我要说的一件事是,委托和接口都已经在真实类型之上形成了“间接层”。方法或类的视图,如果你愿意的话。从一种观点转变为另一种观点是相当合理的。对我来说,实际的课程感觉像是一种更具体的表示——从一种具体的表示转移到另一种感觉不太合理。这是一个非常敏感的解释,而不是真正的技术限制。
这是 CLR 限制。请参阅为什么 C# (4.0) 不允许泛型类类型中的协变和逆变?补充评论。