码迷,mamicode.com
首页 > 其他好文 > 详细

Convariance、Contravariance、Invariance

时间:2015-10-29 16:13:40      阅读:145      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!