C#-协变逆变

news/2024/12/2 21:28:47/

协变:
​ 和谐的变化,自然的变化
​ 因为里氏替换原则,父类可以装子类,所以子类变父类

​ 比如 string 变成 object,感受是和谐的

​ 逆变:
​ 逆常规的变化,不正常的变化
​ 因为里氏替换原则 父类可以装子类 但是子类不能装父类,所以父类变子类

​ 比如 object 变成 string,感受是不和谐的

​ 协变和逆变是用来修饰泛型的
​ 协变:out
​ 逆变:in
​ 用于在泛型中修饰泛型字母的,只有泛型接口和泛型委托能使用

// 作用                                                                // 1.返回值 和 参数                                                                   
// 用out修饰的泛型 只能作为返回值                                                            
internal delegate T TestOut<out T>();                                          // 用in修饰的泛型 只能作为参数                                                              
internal delegate void TestIn<in T>(T t);                                      // 2.结合里氏替换原则理解                                                                 
internal class Father { }                                                      internal class Son : Father { }                                                                                                                      internal class Program                                                         
{                                                                              private static void Main(string[] args) {                                  Console.WriteLine("协变逆变");                                             // 作用(结合里氏替换原则理解)                                            // 协变 父类总是能被子类替换                                                        // 看起来 就是 son ——> father                                               TestOut<Son> os = () => new Son();                                     TestOut<Father> of = os;                                               Father          f  = of(); // 实际上 返回的 是os里面装的函数 返回的是Son                 // 逆变 父类总是能被子类替换                                                        // 看起来像是 father——>son 明明是传父类 但是你传子类 不和谐的                                TestIn<Father> iF = value => { };                                      TestIn<Son> iS = iF;                                                   iS(new Son()); // 实际上 调用的是 iF                                              }                                                                          
}                                                                              

​ 协变 out
​ 逆变 in
​ 用来修饰泛型替代符,只能修饰接口和委托中的泛型

​ 作用两点:

  1. out 修饰的泛型类型只能作为返回值类型 ,in 修饰的泛型类型只能作为参数类型
  2. 遵循里氏替换原则,用 out 和 in 修饰的泛型委托,可以相互装载(有父子关系的泛型)

​ 协变:父类泛型委托装子类泛型委托

​ 逆变:子类泛型委托装父类泛型委托


http://www.ppmy.cn/news/656251.html

相关文章

超融合究竟带来了什么 超融合方案有哪些优势 企业超融合方案怎么做?

随着智能数据时代的到来&#xff0c;企业对于自身业务、互联网等所产生的海量数据在存储、计算、应用等很多方面的处理需求不断攀升。 根据对企业CIO的调查&#xff0c;CIO心中理想的IT基础设施应该满足三个方面&#xff1a;第一&#xff0c;按需购买。第二&#xff0c;敏捷交付…

超融合是什么?

什么是超融合&#xff0c;超融合有什么作用&#xff1f;超融合概念&#xff0c;超融合系统&#xff0c;企业 超融合方案怎么做 中国人非常喜欢这个“融”字&#xff0c;IDC数据显示&#xff0c;2015年中国超融合市场整体规模达到9170万美元&#xff0c;超过2014规模的3倍&#…

主流超融合技术及其区别

1.超融合技术是指在同一套单元设备&#xff08;x86服务器&#xff09;中不仅仅具备计算、网络、存储和服务器虚拟化等资源和技术&#xff0c;而且还包括缓存加速、重复数据删除、在线数据压缩、备份软件、快照技术等元素&#xff0c;而多节点可以通过网络聚合起来&#xff0c;实…

超融合过时?来看看超融合最时髦的应用场景

2022年&#xff0c;距离第一次听到超融合这个词已经过了近十年&#xff0c;“超融合”听起来已经并不新鲜&#xff0c;面对愈来愈多的新技术&#xff0c;超融合似乎已经不再有话题性&#xff0c;那么超融合是否已经过时了&#xff1f; 先来看看市场数字&#xff0c;IDC发布的《…

超融合详细对比:市面各主流超融合产品及厂商优劣势解密

随着超融合在国内市场兴起并逐步成为主流&#xff0c;一场针对于IT基础架构的技术变革悄然而至。沿用二十多年的传统IT架构面临着新一代架构的严重冲击。近几年来&#xff0c;面对巨大的市场机遇&#xff0c;超融合厂商也如雨后春笋&#xff0c;不断涌现。企业用户的数字化转型…

超融合、虚拟化技术资料汇总

1. 博客 Linux系统虚拟化模型及障碍 Linux中断虚拟化&#xff08;一&#xff09; Linux中断虚拟化&#xff08;二&#xff09; 深入理解虚拟化 KVM详解&#xff0c;太详细太深入了&#xff0c;经典 一文读懂容器网络发展 云计算存储技术基础之存储虚拟化 2. 视频 云计算知识…

超融合架构介绍

一、什么是超融合&#xff1f;超融合具体包含那些组件&#xff1f; 超融合架构&#xff0c;其实就是“服务器虚拟化分布式存储”架构&#xff0c;即超融合技术包含了服务器虚拟化技术和分布式存储技术。 服务器虚拟化技术目前在企业数据中心已经有广泛的应用&#xff0c;其核心…

超融合架构与容器超融合

原文链接&#xff1a; http://geek.csdn.NET/news/detail/96101 最早大概是由NUTANIX知道“超融合”概念&#xff0c;原本以为这又是厂商的噱头和炒作&#xff0c;谁知不然&#xff0c;超融合这两年发展如火如荼。2015年被公认为超融合元年&#xff0c;在软件定义存储SDS的推动…