首页 > 其他 > 详细

接口的协变和逆变

时间:2015-10-29 16:17:53      阅读:194      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!