【问题标题】:A good practical application of the Covariance and Contravariance in .NET 4.0?.NET 4.0 中协变和逆变的一个很好的实际应用?
【发布时间】:2010-05-27 18:00:36
【问题描述】:

我希望了解最近发布的 .NET Framework 4.0 及其Covariance and Contravariance in Generics

即使我已经阅读了引用链接上的内容,但我无法掌握应该如何使用它以及何时不应该使用它。

感谢您提供简短的解释和简单的真实世界代码示例。

谢谢! =)

【问题讨论】:

    标签: generics c#-4.0 .net-4.0 covariance


    【解决方案1】:

    Eric Meijer 在 Scott 最近的播客之一中与 Scott Hanselman 谈论反应式框架,Eric 所说的其中一件事是,在 .NET 4.0 中,IEnumerable 是协变的,但在 .NET 3.5 中,IEnumerable 不是。

    这意味着,如果您有一个继承自 FruitBanana 对象,则可以将香蕉分配给 Fruit 变量,但不能将香蕉的 IEnumerable 传递给期望水果的方法.NET 3.5 中的 IEnumerable,因为 IEnumerable 不是协变的。

    来自播客:

    如果我有一堆香蕉,我可以 将其发布在您需要数组的地方 水果,因为香蕉是 水果 所以如果我有一堆香蕉 你需要一堆水果 我可以 把那个数组传给你。现在,如果你 期待无数的水果,我 不能给你一个可枚举的 香蕉,因为在 .NET 之前可以枚举 4.0 不是协变的。所以事实上,即使香蕉是一种特殊的 一种水果,无数的香蕉 不是可数的水果。

    【讨论】:

    • 不是一个超级真实的例子,是吗? :)
    • @cwap:能够传递协变集合是真正的编程问题;在一种情况下,您可以只传递集合,在另一种情况下,您必须将集合中的每个项目复制到新集合中。如果您真的想要真实世界的示例,请收听播客。 Eric 详细解释了为什么这在设计响应式框架时很重要。
    • 当然,没有听播客 :) 乍一看,我只是不认为 Banana : Fruit 是一个真实世界的例子——但我们确实同意这是一个很棒的例子功能!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    相关资源
    最近更新 更多