c#4.0协变逆变的理解

协变 对应返回类型。
逆变 对应参数类型。

第一点:不管是协变还是逆变,其实都是完全遵从类型兼容的,只是将一个本来应该默认实现的东西,改为显式的声明。这个是从调用者角度出发的观点,你可以把协变和逆变都认为是“理所当然”的。

第二点,在理解的时候,需要把参考的对象固定为函数相对函数的兼容上。

 

把父类看作更大的类型。

 从小到大 是协调的。

从大到小 是反常的。

 举例:

 大 funA(小)。

 小 funB(大)。

 funA 包容 funB。因为所有用到funA的场合都能替换成funB,反之不成立。

 

从函数兼容的角度(funB -> funA):

返回类型是协调的。

参数类型是反常的。

 

从调用者角度,从来都是由小类型传到大类型的。

四种调用场合:

大 a = funB()

funB(小)

大 a = funA()

funA(小)

 

只属于funB的特定场合:

小 a = funB()

funB(大)

 

posted @   诺贝尔  阅读(550)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示