2010-05-27 30 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