2010-05-27 27 views

回答

6

Eric Meijer在Scott最近的播客中与Scott Hanselman谈论了Reactive Framework,Eric说,在.NET 4.0中,IEnumerable是协变的,但是在.NET 3.5中IEnumerable不是。

这意思是说,如果你有一个Banana对象,从Fruit继承,您可将香蕉的水果变量,但你不能传递香蕉的IEnumerable的方法期待IEnumerable的水果在.NET 3.5 ,因为IEnumerable不是协变的。

从播客:

如果我有香蕉的数组,我可以 职位,在你需要的 水果的数组,因为香蕉是一种分型 水果,所以如果我有一个香蕉阵列 ,你需要一个水果阵列我可以 传递你的数组。现在,如果你想要一个无数的水果,我 不能传递给你一个枚举的 香蕉,因为直到.NET 4.0是不协变的。所以即使香蕉是一种特殊的水果,香蕉 也不是一种水果。

+0

不是真的超现实世界的例子吗? :) – cwap 2010-05-27 18:22:44

+0

@cwap:能够通过covariant收集是一个真正的编程问题;在一种情况下,您只需传递集合,而在另一种情况下,您必须将集合中的每个项目复制到新集合中。如果你真的想要现实世界的例子,听播客。 Eric详细解释了为什么在设计Reactive Framework时这很重要。 – 2010-05-27 18:29:13

+0

承认,没有听播客:)乍一看,我只是没有想到香蕉:水果,是一个真实世界的例子伟大 - 但我们同意这是一个伟大的功能! – cwap 2010-05-27 21:54:22