首页 > 编程语言 >C#中的协变、逆变

C#中的协变、逆变

时间:2023-12-08 15:59:23浏览次数:28  
标签:C# 协变 逆变 实例 类型 泛型

一、概述

1、在 C# 中,协变和逆变能够实现数组类型、委托类型和泛型类型参数的隐式引用转换。

2、按字面,可以这样理解:协变,感觉协和地隐式引用转换;逆变,逆反直觉地隐式引用转换。

二、泛型中的协变和逆变

1、定义

(1)协变,使你能够使用比原始指定的类型派生程度更大的类型。你可以将 IEnumerable<Derived> 的实例分配给 IEnumerable<Base> 类型的变量。

(2)逆变,使你能够使用比原始指定的类型更泛型的类型(派生程度更小的类型)。你可以将 Action<Base> 的实例分配给 Action<Derived> 类型的变量。

(3)不变性,表示只能使用最初指定的类型。 固定泛型类型参数既不是协变,也不是逆变。你无法将 List<Base> 的实例分配给 List<Derived> 类型的变量,反之亦然。

 

标签:C#,协变,逆变,实例,类型,泛型
From: https://www.cnblogs.com/jmllc/p/17888301.html

相关文章

  • SBT30100VFCT-ASEMI肖特基二极管SBT30100VFCT
    编辑:llSBT30100VFCT-ASEMI肖特基二极管SBT30100VFCT型号:SBT30100VFCT品牌:ASEMI封装:TO-220F正向电流:30A反向电压:100V引线数量:3芯片个数:2芯片尺寸:94MIL漏电流:<10ua恢复时间:5ns浪涌电流:250A芯片材质:正向电压:0.40V~0.66V工作结温:-65℃~150℃包装方式:500/箱SBT30100VF......
  • 在vue3中使用openlayers3实现track轨迹动画
    网上太多资料代码,抄来抄去,而且版本也是OL2的,部分API已经弃用基础知识不多说,直接讲重点三个关键变量//记录开始动画的时间conststartTime=ref(0);//轨迹分割的颗粒度,数值越小分的越细constparticle=20;//轨迹动画的速度,数值越大位移越快constspeed=10;根......
  • 27-1 BFD联动实验(OSPF/Static Router/VRRP)
    拓扑要求:1.接入层和汇聚层配置MSTP+VRRP实现高可用性2.汇聚层和核心层配置BFD高可用性3.汇聚层和核心层之间允许OSPF,OSPF配置BFD实现高可用性4.核心层到LSP配置静态路由,要求配置BFD实现高可用性配置基础配置(VLAN+IP)PC1配置,PC2参考PC1Access配置#vlanbatch1020#......
  • OSCP(扩展篇靶机SickOS1.1)
    第一步:nmap和niktonikto:https://zhuanlan.zhihu.com/p/124246499 8080http-proxy我们是利用3128查看nikto是否存在可利用的漏洞nikto-h192.168.107.148--useproxy192.168.107.148:3128扫描目标时,部分目标部署了防护设备,为避免暴露ip可以使用代理进行扫描,nikto支持......
  • 后处理器ConfigurationClassPostProcessor如何解析注解
    以上就是ConfigurationClassPostProcessor解析配置类的主要流程,我们可以看到解析的入口依然是AbstractApplicationContext的refresh核心方法。ConfigurationClassPostProcessor接口实现了BeanDefinitionRegistryPostProcessor(BeanFactory的后处理器),PriorityOrdered(设置自己的......
  • nerdctl run -d 报"failed to call cni.Setup: plugin type=\"bridge\" failed (ad
    背景:执行 nerdctl run-d --namenginx-p8080:80nginx时,报如下错误FATA[0000]failedtocreateshimtask:OCIruntimecreatefailed:runccreatefailed:unabletostartcontainerprocess:errorduringcontainerinit:errorrunninghook#0:errorrunningh......
  • tesseract.js 又一个基于webassembly 的tesseract ocr 包装
    tesseract.js是基于webassembly的jstesseract实现,可以在web以及node中运行,我以前简单介绍过一个基于webassembly的工具tesseract-wasm的实现相对简单(包括构建),当然技术上都是基于了emscripten进行的构建,tesseract.js包装了tesseract.js-core功能相比tesseract-wasm丰富......
  • opencv4.8+vs2019 运行出现一堆[INFO:XXX]信息
    前言Opencv+vs2019搭建成功运行后出现一堆INFO信息,虽说不影响程序运行但是会占据控制台窗口,覆盖正常调试输出出现时机:在每次需要显示图像时均会出现,如:namedWindow、imshow函数调用时。 一、现象分析这些不是错,是OpenCV在启动时加载GUI(图形用户界面)后端注册表的信息,显示的是......
  • ComplexUpset包画upset图
    需要的数据格式:其中1、0用于表示该类别是否存在这类数据,也可以用TRUE跟FALSE来代替  upset(data_use,unique(colnames(data_use)),name="genres",#底部的标签width_ratio=0.01,#左侧图形的宽度mode='inclusive_intersection', #该包提供四种模......
  • httpclient跳过SSL证书验证的写法
    最近在请求https接口的时候,发生了异常:sun.security.validator.ValidatorException:PKIXpathbuildingfailed:sun.security.provider.certpath.SuncertPathBuilderException:unabletofindvalidcertificationpathtorequestedtarget无法找到到请求目标的有效证书路......