這可能是重復的。但經過一天的研究,我希望你能寬大處理。這是一個關于協方差的問題。
為什么我可以這樣做?
List<Animal> allAnimals = new List<Animal>();
allAnimals.Add(new Dog());
allAnimals.Add(new Cat());
但不能這樣做嗎?
List<Dog> aBunchOfDogs = new List<Dog>();
allAnimals = aBunchOfDogs;
我已經閱讀了一些關于協方差的討論。
“C# 中的協方差”
“將串列轉換為介面串列”
“將串列轉換為介面串列”
我的理解是,我不能將狗串列添加到動物串列中,因為那樣我可以將貓添加到動物串列中,這會很危險。但是將貓或狗的單個實體添加到動物串列中也同樣危險,不是嗎?在我看來,C# 尚未決定是否信任我。
uj5u.com熱心網友回復:
假設您了解為什么可以將 aDog和Catinstance 傳遞給方法 accepting Animal,這就是不允許使用后一個示例的原因:
List<Dog> aBunchOfDogs = new List<Dog>();
allAnimals = aBunchOfDogs;
allAnimals.Add(new Cat()); // Fine because allAnimals is List<Animal>
foreach (var dog in aBunchOfDogs)
{
dog.Woof(); // The Cat can't woof
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/331422.html
上一篇:為什么在DataGrid中重繪ObservableCollection很慢
下一篇:如何將物件列印到控制臺?
