如果想要这种效果, 就要用协变.
List? extends Number这样ListInteger就能成为List? extends Number 子类, 也就是可以赋值
这里如果你想要相反的效果, 则用逆变, List? super Number这样继承关系就会相反.
那么什么时候用协变,逆变?
协变主要是用在函数的返回值上,逆变用在函数参数上,这样的规则也就能遵循 里氏替换原则 .
如 Function , 在这里 R作为函数的返回值, 所以这个泛型要协变, 而 T 用在函数的参数上所以要用逆变
这里举个例子
假设有以下继承关系:
车轿车标准轿车高级轿车
现在有一个人声称自己能修理所有的标准轿车, 所以发出了以下公告:
假设我现在有 List轿车 和List高级轿车
那么这个人到底能修理哪个呢? 从上面的函数声明来看都不可以.
再来看看这个人的声明
他说能够修理所有 标准轿车
那么因为标准轿车扩展了轿车, 所以如果能够修理标准轿车, 那么应当可以修理轿车
所以这个函数应当可以接受所有 标准轿车 的父类
也就是说List轿车能够传入 以 List标准轿车 为参数的函数
换句话说List轿车是 List标准轿车 的子类, 这样才能传入参数
所以上面的公告要用逆变, 改成如下:
也许也不会有人想把自己的高级轿车交给这家伙.
以此类推, 函数的返回值应当用协变, 这样既能满足 里氏替换原则 了
vb.net协变和逆变的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c# 逆变和协变、vb.net协变和逆变的信息别忘了在本站进行查找喔 。
推荐阅读
- flutter使用echart,flutter eclipse
- 电商应该如何选品牌,电商怎么选品
- 直播平台还需要代理吗吗,直播需要公司平台吗
- sqlserver2012备份命令行,sql2012备份数据库
- vb.net启动线程 vbnet中有几种线程
- 为什么华为改用鸿蒙系统,为什么华为鸿蒙系统很卡
- 怎么设置路由器dhcp,怎么设置路由器wifi设置教程
- 快手直播怎么直播qq音乐,快手直播怎么放音乐唱歌
- vb.net画一个点 vb画直线代码