首页 > 其他 > 详细

Convariance、Contravariance、Invariance

时间:2015-10-29 16:13:33      阅读:752      评论:0      收藏:0      [点我收藏+]

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!