标签:
Convariance(协变):派生类型的引用可以赋值给基类变量。
1 class Animal 2 { 3 public int NumberOfLegs = 4; 4 } 5 class Dog : Animal 6 { 7 8 } 9 class Program 10 { 11 static void Main() 12 { 13 Animal a1 = new Animal(); 14 Animal a2 = new Dog();//将派生类的引用赋值给基类 15 Console.WriteLine("{0}",a2.NumberOfLegs); 16 Console.Read(); 17 } 18 }
Contravariance(逆变):一种委托的引用赋值给另一种委托类型的栈变量。其中两种委托类型的约束类型是继承关系!逆变关键字in
class Animal { public int NumberOfLegs = 4; } class Dog : Animal { } class Program { delegate void Action<in T>(T a);//in 逆变关键字 static void ActOnAnimal(Animal a) { Console.WriteLine(a.NumberOfLegs); } static void Main() { Action<Animal> act1 = ActOnAnimal;//创建方法参数为Animal类型的委托变量并赋值 Action<Dog> dog1 = act1;//将变量赋值给方法参数为Dog类型的委托变量,其中Animal为Dog的基类! dog1(new Dog()); } }
Convariance、Contravariance、Invariance
标签:
原文地址:http://www.cnblogs.com/yerunwu/p/4920633.html