【发布时间】:2010-05-27 18:00:36
【问题描述】:
我希望了解最近发布的 .NET Framework 4.0 及其Covariance and Contravariance in Generics。
即使我已经阅读了引用链接上的内容,但我无法掌握应该如何使用它以及何时不应该使用它。
感谢您提供简短的解释和简单的真实世界代码示例。
谢谢! =)
【问题讨论】:
标签: generics c#-4.0 .net-4.0 covariance
我希望了解最近发布的 .NET Framework 4.0 及其Covariance and Contravariance in Generics。
即使我已经阅读了引用链接上的内容,但我无法掌握应该如何使用它以及何时不应该使用它。
感谢您提供简短的解释和简单的真实世界代码示例。
谢谢! =)
【问题讨论】:
标签: generics c#-4.0 .net-4.0 covariance
Eric Meijer 在 Scott 最近的播客之一中与 Scott Hanselman 谈论反应式框架,Eric 所说的其中一件事是,在 .NET 4.0 中,IEnumerable 是协变的,但在 .NET 3.5 中,IEnumerable 不是。
这意味着,如果您有一个继承自 Fruit 的 Banana 对象,则可以将香蕉分配给 Fruit 变量,但不能将香蕉的 IEnumerable 传递给期望水果的方法.NET 3.5 中的 IEnumerable,因为 IEnumerable 不是协变的。
来自播客:
如果我有一堆香蕉,我可以 将其发布在您需要数组的地方 水果,因为香蕉是 水果 所以如果我有一堆香蕉 你需要一堆水果 我可以 把那个数组传给你。现在,如果你 期待无数的水果,我 不能给你一个可枚举的 香蕉,因为在 .NET 之前可以枚举 4.0 不是协变的。所以事实上,即使香蕉是一种特殊的 一种水果,无数的香蕉 不是可数的水果。
【讨论】: