浅谈 C# 协变与逆变中 “out” 与 “in” 关键字的必要性

        近来经常涉及泛型委托及接口的协变与逆变的问题,在网上搜索的时候,人们都是在反复地强调协变和逆变的概念,强调什么时候要加关键字 out,什么时候要加 in。可是鲜有人去说明:为何协变要加 out,为什么逆变就必须要加 in。下面我就在文章中稍作一下解释,可能解释有不妥的地方,欢迎指正。

        首先说说协变,以泛型委托中的协变举例:

        class Animal { public int LegNum = 2; }

        class Dog : Animal { }

        delegate T Del<out T>();      // 注意这个委托,签名中没有 T ,返回中有。

        class Program

        {

            public static Dog Method() { return new Dog(); }

            static void Main()

            {

                aDog = Method;

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值