在下面的示例中,我可以添加類型的List
。由於Dog
和Cat
來自動物,所以List
可以容納每個。但是,如果我有一種方法接受List<Animal>
,則無法傳入參考List<Dog>
。如果Dog
源自動物,爲什麼這是無效的?但是,如果我有一個方法,除了Object
類型的參數,並且所有對象來自Object
,它的工作原理。除派生類的對象之外的方法
class Program
{
static void Main(string[] args)
{
List<Animal> animals = new List<Animal>();
animals.Add(new Dog() { Color = "Black" }); // allowed since Dog derives from Animal
List<Dog> dogs = new List<Dog>();
dogs.Add(new Dog() { Color = "White" });
Test(animals);
Test(dogs); // not allowed - does not compile
Test2(dogs); // valid as all objects derive from object
}
static void Test(List<Animal> animals) {
// do something
}
static void Test2(object obj) {
}
}
public class Animal {
public String Color { get; set; }
}
public class Dog : Animal { }
public class Cat : Animal { }
嘗試'靜態無效測試(IEnumerable動物)' –
2015-02-24 15:14:08
搜索'協變量和c#中的變異性' – 2015-02-24 15:15:51
正如Selman22建議,看看[這裏](https://msdn.microsoft.com/it-it/ library/dd799517(v = vs.110).aspx) – 2015-02-24 15:16:34