C# in out 与协变逆变

本文介绍了C#中泛型的逆变和协变概念,逆变允许子类对象赋值给父类引用作为参数,而协变则允许子类对象作为返回值。通过in和out关键字,可以实现类型安全的转换,in主要用于方法参数,保证父到子类型的兼容性,而out用于返回值,确保从子类到父类的协变性。
摘要由CSDN通过智能技术生成

首先让我们记住这些内容

in —定义逆变 (父类到子类)
out–定义协变 (子类到父类)

开玩笑哈哈,都是成年人了,不至于要背书

我们都知道.Net里或者说在OOP的世界里,可以安全地把子类的引用赋给父类引用,例如:

string str = "string";
object obj = str;

而C#里又有泛型的概念,泛型是对类型系统的进一步抽象,比上面简单的类型高级,把上面的变化体现在泛型的参数上就是我们所说的逆变与协变的概念。通过在泛型参数上使用in或out关键字,可以得到逆变或协变的能力。

一、逆变

在这里插入图片描述

这样定义,只允许T类型在参数内使用允许类型<父类>到类型<子类>的转换

二、协变

在这里插入图片描述
这样定义,只允许T类型在返回值内使用允许类型<子类>到类型<父类>的转换

三、理解一下

out - 能获取猪肉的方法,一定是获取到了动物肉,所以out仅用于返回值,是一种子到父的必然成立,称为协变
in - 能杀动物的方法,一定可以杀猪,所以in仅用于参数,是一种父到子的必然成立,称为逆变

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YUE ZHEN PENG

码字不易,如果你想请我喝杯果汁

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值