在下面的代碼:問題關於C#的協方差
interface I1 { }
class CI1: I1 { }
List<CI1> listOfCI1 = new List<CI1>();
IEnumerable<I1> enumerableOfI1 = listOfCI1; //this works
IList<I1> listofI1 = listOfCI1; //this does not
我能夠分配我的「listOfCI1」到IEnumerable<I1>
(由於協方差)
但爲什麼我不能把它分配給一個IList<I1>
? 對於這個問題,我甚至不能做到以下幾點:
List<I1> listOfI12 = listOfCI1;
不應該協方差讓我分配一個派生類型的基本類型?
順便說一句,那話很棒。 – 2010-10-27 14:51:22
@Arnis:謝謝 - 我自己喜歡它,即使我沒有展示我錄製的Hokey Cokey視頻... – 2010-10-27 14:52:20
Jon,BCL團隊也加入了IEnumerable(IEnumerable:IEnumerable),因爲IEnumerable不允許你添加任何新成員(即它的不可變)使其安全。但另一方面,IList 沒有添加「out」,因爲它是可變的(可以在底層列表中添加不同的實現?) –
2010-10-27 17:46:31