首先让我们记住这些内容
in —定义逆变 (父类到子类)
out–定义协变 (子类到父类)
开玩笑哈哈,都是成年人了,不至于要背书
我们都知道.Net里或者说在OOP的世界里,可以安全地把子类的引用赋给父类引用,例如:
string str = "string";
object obj = str;
而C#里又有泛型的概念,泛型是对类型系统的进一步抽象,比上面简单的类型高级,把上面的变化体现在泛型的参数上就是我们所说的逆变与协变的概念。通过在泛型参数上使用in或out关键字,可以得到逆变或协变的能力。
一、逆变
这样定义,只允许T类型在参数内使用,允许类型<父类>到类型<子类>的转换
二、协变
这样定义,只允许T类型在返回值内使用,允许类型<子类>到类型<父类>的转换
三、理解一下
out - 能获取猪肉的方法,一定是获取到了动物肉,所以out仅用于返回值,是一种子到父的必然成立,称为协变
in - 能杀动物的方法,一定可以杀猪,所以in仅用于参数,是一种父到子的必然成立,称为逆变
分类:
Unity3D C# 技术探索
标签:
c#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统