为了账号安全,请及时绑定邮箱和手机立即绑定

泛型类多态?协变逆变?

泛型类多态?协变逆变?

C#
富国沪深 2018-08-06 06:10:54
在实现行为模式时,用继承和多态搞定是没问题,可在尝试使用泛型化的类来实现时,遇到了一些问题,自己也去看了协变逆变相关的知识,发现还是无法理解,特来向各位园友请求赐教,谢谢!想达成的效果是,定义一个泛型基类集合,然后添加此泛型基类派生出来的子类至集合中,并在循环中调用基类的方法。可是,遇到了一些问题,是泛型参数不支持继承?Car<IBrand>或ICar<IBrand> 并不能接受子类Car<Bmw> 的赋值, 看上去好像不仅仅像是协变逆变方面的问题,或是我哪里理解有误,不解中……
查看完整描述

1 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

逆变协变这个你换个思路来看

协变,从具体往抽象(从派生类往父类变动)

逆变,从抽象往具体(同上相反)

从关键字看

协变 out (直接可以看成返回)

逆变 in  (直接可以看为入参)

你写的代码的问题有两个

1.这里是协变(out)

2.class级别是不支持逆变和协变的(隐式支持协变,但这个是另一个话题了),所以你这边不可能直接从Car<T>中鼓捣出个类似于Cat<out T>的玩意出来,所以你第一行是没办法了


查看完整回答
反对 回复 2018-08-20
  • 1 回答
  • 0 关注
  • 712 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信