10

这是 CLR 的限制还是与现有代码存在兼容性问题?

这与 C# 4.0 中委托组合的混乱变化有关吗?

编辑:是否有可能在 CLR 上运行不受限制的使用协变/逆变的语言?

4

3 回答 3

8

您将需要阅读 Eric Lippert 的文章,了解它为何如此运作。不足之处在于它们允许尽可能多的差异,而不允许开发人员在编程中犯下可能导致难以追踪错误的严重错误。与 3.0 规则相比,4.0 中的差异量大大扩展,据我了解,这是在对开发人员有利的内容和安全允许的内容之间取得平衡,而不会因无意的错误而引起太多麻烦。

http://blogs.msdn.com/b/ericlippert/archive/tags/covariance+and+contravariance/default.aspx

于 2010-08-04T13:25:03.890 回答
5

简单的回答:这是 CLR 限制。

(我在任何地方都没有看到一个好的、具体的解释......我不记得在 Eric 的博客系列中看到过一个关于它的内容,尽管我很可能在某个地方错过了它。)

要说的一件事是,委托和接口都已经在真实类型之上形成了“间接层”。方法或类的视图,如果你愿意的话。从一种观点转变为另一种观点是相当合理的。对我来说,实际的课程感觉像是一种更具体的表示——从一种具体的表示转移到另一种感觉不太合理。这是一个非常敏感的解释,而不是真正的技术限制。

于 2010-08-04T13:26:28.527 回答
2

这是 CLR 限制。请参阅为什么 C# (4.0) 不允许泛型类类型中的协变和逆变?补充评论。

于 2010-08-04T16:17:12.430 回答