2013-03-14 38 views

回答

3

IEnumerable<out T>意味着「這種類型的值可以被分配到任何類型IEnumerable<X>其中XTT父母的變量」

如果你有這樣的事情IList<out T>,這將意味着你可以做以下:

IList<string> strings = new List<string>(); 
IList<object> objects = strings; 
objects.Add(new object()); 

顯然這不是類型安全的,這就是爲什麼不存在這樣的接口。

0

人們不能有一個接口,其是一個變體相對於T並且包括一個Add方法,該方法採用類型T,因爲一個會暗示這是能夠接受的Dog任何類型的集合是能夠接受任何類型的Animal。我們可以定義一個變體接口IFeedable<in T>Feed方法,它採用了T類型的參數(我更喜歡「feed」爲「add」,因爲後一項也可以指算術運算,並且由於存在可以接受對象並對它們做某事的對象並不意味着這些對象正在被添加到某種集合中;例如,可以很容易地擁有一個過濾類,它需要一個IFeedable<T>和一個Predicate<T>並實現IFeedable<T>,每個對象都需要一個T它被賦予了,稱爲謂詞函數,並且只有當謂詞返回true時纔將該項傳遞給提供的IFeedable<T>。賦予這種方法的數據不一定會被「添加」到任何類型的集合中,而是會被「饋送」 「to他反對實現界面。

相關問題