c# 协变和逆变

这篇具有很好参考价值的文章主要介绍了c# 协变和逆变。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先这是一个关于泛型的知识,过于冷门,以至于我在书的夹缝中才找到关于它简短的说明。

而且干活这么久确实没用过


可变性分为三种,协变逆变不变
仅将派生类型用作输出值与构造委托有效性之间的常数关系叫做协变。为了让编译器知道我们的期望,必须通过out关键字来进行标记委托声明中的类型参数。
Eg:

Delegate T Factory<out T>();

比如有两个数值,A是基类,B是派生自A。
各自封装成不同的委托类型,这时尽管B派生自A但编译器会报错,因为这两个对象此时为同级的委托对象,这样两者之间实际上并没有派生关系,因此以往的赋值兼容不适用。
我们希望能够返回一个关于A的引用,如果返回指向B也应可以,因为根据兼容性B指向了A,但由于委托类型的不匹配,因此不能这样进行操作。
假如只用作输出值,同样的情况也适用于任何委托。
这样我们传入一个A类型的对象,但实际上传入了B,因为B派生自A,这样调用的代码就能够接受B类型的对象,从而达到可以自由访问B的基类A的部分,最后返回B ,但原本在B的基类A却发生了改变。

逆变
在期望传入基类时允许传入派生对象的特性叫做逆变

有人看到这,你逆变就写了一行???

其实不是我不想写,而是这俩写出来东西太过于相近,以至于看资料到这我也蒙,我擦,这俩你要这么写有个啥区别?

区别:协变和逆变都是术语,前者指能够使用比原始指定的派生类型的派生程度更大(更具体的)的类型,后者指能够使用比原始指定的派生类型的派生程度更小(不太具体的)的类型。

所以.....逆变就写了一行...

 文章来源地址https://www.toymoban.com/news/detail-496076.html

到了这里,关于c# 协变和逆变的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Typescript中的逆变与协变

    许多不是很熟悉 TS 的朋友对于逆变和协变的概念会感到莫名的恐惧,没关系。它们仅仅代表阐述表现的概念而已,放心我们并不会从概念入手而是通过实例来逐步为你揭开它的面纱。 首先,我们先来思考这样一个场景: 我们都清楚 TS 属于静态类型检测,所谓类型的赋值是要

    2024年02月07日
    浏览(19)
  • Kotlin 中的协变与逆变

    在 Kotlin 中,协变(covariance)和逆变(contravariance)是与类型参数相关的重要概念。它们允许我们在泛型类型的继承关系中更灵活地处理类型转换。本文将介绍协变和逆变的概念,并通过示例代码来说明它们的用法和好处。 协变是指在类型参数的继承关系中,允许将一个泛型

    2024年02月06日
    浏览(28)
  • 关于博主单相逆变电路的元器件清单,这里列一个说明

    本文列出了单相逆变电路的元器件清单,想DIY的朋友可以试一试。 另外有一个调整的地方,就是原电路图上的继电器不要焊接,直接连接I+和I-一端,在实际测试过程中出现了继电器哪怕没有驱动信号也在闭合,可能与高频方面有关系,最后买了个继电器模块到输入端,直接

    2024年02月12日
    浏览(29)
  • 【100个 Unity实用技能】☀️ | C#泛型集合常用方法,查找符合要求的第一个元素并返回

    老规矩,先介绍一下 Unity 的科普小知识: Unity 是 实时3D互动内容创作和运营平台 。 包括 游戏开发 、 美术 、 建筑 、 汽车设计 、 影视 在内的所有创作者,借助 Unity 将创意变成现实。 Unity 平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和

    2023年04月08日
    浏览(37)
  • 这是关于“树先生“的故事

    树的定义:树是指由N(N=0)个有限结点组成的具有层次性关系的集合,是一种简单的非线性结构。当N=0时,称为空树。 前序遍历 中序遍历 后序遍历 对于前中后序遍历使用的是根节点的位置决定前中序。 层序遍历 对于层序来说就是一层一层的进行遍历,由上面一层的根节遍

    2024年02月05日
    浏览(41)
  • 关于设置静态IPV4静态地址后ipconfig/all发现IPV4首先是169开头的IP

     解决办法一: 出现这种情况一般是IP地址冲突,换一个IP地址。 解决办法二: 1、windows+R 输入cmd进入命令行。 2、输入  netsh winsock reset 后回车 , 稍后,会有成功的提示:成功地重置Winsock目录→重启计算机完成重置。 3、之后输入 netshintIPreset.log (按回车键执行命令) 4、之

    2024年04月25日
    浏览(22)
  • 这是一款关于网页自动化操作的软件

    有开发这款软件的想法是因为工作中有部分任务重复性太多,作为开发工程师,一开始自己写了脚本完成了这些任务。换个思路,各行各业中也会遇到重复性工作,但是并不是每个人都会开发,那本人就想有没有一种软件也可以让不懂开发的人也可以实现自动化工作。于是,

    2024年01月21日
    浏览(32)
  • C#实现简单的心形表白代码<这是属于程序员的浪漫!>

    C#是微软公司发布的一种由C和C++衍生出来的面向对象的编程语言、运行于.NET Framework和.NET Core(完全开源,跨平台)之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如

    2024年02月12日
    浏览(35)
  • 【单元测试】测还是不测,这是一个问题

    这篇文章也可以在我的博客中查看 相信大家从小就被千叮万嘱要做单元测试。然后秉承这一信念,成为了一个测试狂魔。凡有代码,测!覆盖!最终,一波操作猛如虎:467测试,0错误, 0自信 。 第二天。 你为了优化,颤抖着手更改了一行代码。果不其然发现牵连了 1e9 个测

    2024年02月03日
    浏览(36)
  • C# 关于使用newlife包将webapi接口寄宿于一个控制台程序、winform程序、wpf程序运行

    C# 关于使用newlife包将webapi接口寄宿于一个控制台程序、winform程序、wpf程序运行 安装newlife包 Program的Main()函数源码 MyController 源码 MyHttpHandler 源码 源代码百度链接 链接:https://pan.baidu.com/s/15OxTDOBO_y5bFyrzPW3XPw?pwd=sr3c 提取码:sr3c

    2024年02月15日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包