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

接口的协变和逆变

时间:2015-10-29 16:21:03      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:

 class Animal { public string Name;}//基类
    class Dog : Animal { }//派生类
    interface IMyIf<out T>//协变关键字out,泛型接口+接口的协变
    {
        T GetFirst();//约束方法
    }
    class SimpleReturn<T> : IMyIf<T>//实现泛型接口的泛型类型
    {
        public T[] items =new T[2];//初始化对象数组
        public T GetFirst() { return items[0]; }//返回对象数组的第一个对象
    }
    class Program
    {
        static void DoSomething(IMyIf<Animal> returner)//静态方法,方法参数为参数约束为Animal对象的接口
        {
            Console.WriteLine(returner.GetFirst().Name);
        }
        static void Main()
        {
            SimpleReturn<Dog> dogReturner = new SimpleReturn<Dog>();//实例化约束为Dog类型的对象
            dogReturner.items[0] = new Dog() { Name="Avonlea"}//赋值
            IMyIf<Animal> animalReturner = dogReturner;//协变为约束为Animal对象的接口
            DoSomething(dogReturner);//执行静态方法
        }
    }

 

接口的协变和逆变

标签:

原文地址:http://www.cnblogs.com/yerunwu/p/4920738.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!