如果派生类只是用于输出值,那么这种结构化的委托有效性之间的常数关系叫做协变
就是创建一个派生类委托对象 让派生类赋值给基类对象 协变关键字out
对期望传入基类时允许传入派生对象的特性叫逆变 逆变关键字in
看一下实现代码
class Animal { public string Name; } class Dog:Animal { } interface Im<out T>//协变 { T GetT(); } class MyClass<T> : Im<T> { public T[] item = new T[2]; public T GetT() { return item[0]; } } class Program { static void DoSomething(Im<Animal> im) { Console.WriteLine(im.GetT().Name); } static void Main(string[] args) { MyClass<Dog> myClass = new MyClass<Dog>(); myClass.item[0] = new Dog() { Name = "AVT" }; Im<Animal> ANIMAL = myClass; DoSomething(myClass); } }