C#-泛型学习笔记

news2024/10/8 11:35:59

C#泛型——约束|协变|逆变

1、泛型使用

在生命时可以使用<>,可以写一个标识符代替一些数据类型,在声明时给出明确定义。
非常强大,因此需要约束。

2、泛型约束

where T: struct//值类型约束,要求泛型必须为基本数据类型
where T: class //引用类型约束,要求泛型必须为类类型
where T: new()//默认构造方法约束,要求泛型必须有默认构造方法(抽象类abstract、接口interface、密封类sealed等都不可以)
多重约束之间用逗号隔开

3、泛型&协变与逆变

(1)协变(子转父)与逆变(父转子)

泛型是一种不指定的数据类型,不同的泛型之间没有继承关系。
但通过泛型定义的类在使用时需要指定泛型的具体类型,这些具体类型之间有时会具备父子关系。
通常情况下,同一个使用泛型的类在不同具体的实例化的同时,对象引用之间不允许相互赋值。
也就是说,A和A之间没有父子关系,默认为不变关系(没有关系)。
这个时候逆变、协变、和不变关系只能自己声明。

(2)使用泛型时协变与逆变的声明out/in

delegate T d1<out T> ();//协变声明
delegate void d2<in T> (T t);//逆变声明

声明协变泛型后, 使用子类的委托对象 可以向 使用父类泛型的委托引用 赋值:

d1<Dog> d11 = MakeAnimal;
d1<Animal> d12 = d11;

声明逆变泛型后, 使用父类的委托对象 可以向 使用子类泛型的委托引用 赋值:

d2<Animal> d21 = MakeAnimal2;
d2<Dog> d22 = d21;

协变泛型只能做返回值,逆变泛型只能做参数。

(3)适用范围

泛型接口和泛型委托
个人感觉是因为泛型接口和泛型委托只能出现在赋值表达式的左侧,作为被赋值的一方,
泛型类有可能不需要声明引用,泛型方法不可能作为对象引用出现在赋值表达式的左侧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2196256.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

叉车AI行人防撞预警系统,提升作业安全与效率

如今&#xff0c;发展飞快的工业蓝海中&#xff0c;叉车作为物流仓储与制造业不可或缺的搬运工具&#xff0c;其安全性一直是行业内外关注的焦点。随着人工智能技术的日益成熟&#xff0c;工业&#xff08;车辆&#xff09;叉车AI行人防撞预警系统解决方案应运而生&#xff0c;…

零基础入门AI大模型应用开发,你需要一个系统的学习路径!

前言 随着人工智能技术的迅猛发展&#xff0c;特别是在大型语言模型&#xff08;LLMs&#xff09;领域的突破&#xff0c;AI大模型已经成为当今科技领域的热门话题。不论是对于希望转型进入AI行业的职场人士&#xff0c;还是对未来充满憧憬的学生&#xff0c;掌握AI大模型的应…

JS 介绍/书写位置/输入输出语法

目录 1. JS 介绍 1.1 JS 是什么 1.2 JS 的作用 1.3 JS 的组成 2. JS 书写位置 2.1 内部 JS 2.2 外部 JS 2.3 内联 JS 3. JS 注释和结束符 4. JS 输入输出语法 4.1 输入语法 4.2 输入语句 4.3 执行顺序 5. 字面量 1. JS 介绍 1.1 JS 是什么 1.2 JS 的作用 1.3 JS …

上海AI Lab视频生成大模型书生.筑梦环境搭建推理测试

引子 最近视频生成大模型层出不穷&#xff0c;上海AI Lab推出新一代视频生成大模型 “书生・筑梦 2.0”(Vchitect 2.0)。根据官方介绍&#xff0c;书生・筑梦 2.0 是集文生视频、图生视频、插帧超分、训练系统一体化的视频生成大模型。OK&#xff0c;那就让我们开始吧。 一、模…

国产长芯微LPQ9008菊花链接口的18单元电池监控器完全P2P替代ADBMS1818

描述 LPQ9008是一款多单元电池堆监控器&#xff0c;可测量多达18个串联连接的电池单元&#xff0c;总测量误差小于3.0 mV。LPQ9008具有0 V至5 V的电池测量范围&#xff0c;适合大多数电池化学应用。可在290 μs内测量所有18个电池单元&#xff0c;并选择较低的数据采集速率以便…

24.10.7(线段树合并,分裂,扫描线,字符串哈希)

星期一&#xff1a; 昨晚熬夜场的div2总算是不负有心人&#xff0c;到C都比较简单&#xff0c;出C后我也没有run的想法&#xff0c;一直在看D&#xff0c;最后5min的时间ac&#xff0c;小小上了波分 贴cf round976 div2 D cf传送门 题意&a…

从学习Java到学习AI大模型,我为什么选择的后者???

我为什么从Java转到AI大模型 在编程的海洋里&#xff0c;Java一直是我信赖的“小船”&#xff0c;载着我航行在代码的世界中。然而&#xff0c;随着行业的不断发展和变化&#xff0c;我开始感受到了一丝的迷茫和不安。我开始担心&#xff0c;随着技术的不断更新&#xff0c;Ja…

银河麒麟桌面操作系统V10 SP1:取消安装应用的安全授权认证

银河麒麟桌面操作系统V10 SP1&#xff1a;取消安装应用的安全授权认证 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 使用银河麒麟V10 SP1安装应用时&#xff0c;若频繁遇到安全授权认证提示&#xff0c;可按以下步骤设置&#xff1a; 打开…

操作系统 | 学习笔记 | 王道 | 4.3 文件系统

4.3 文件系统 4.3.1 文件系统结构 文件系统(File system)提供高效和便捷的磁盘访问&#xff0c;以便允许存储、定位、提取数据。 用一个例子来辅助记忆文件系统的层次结构&#xff1a; 假设某用户请求删除文件"D:/工作目录/学生信息.xIsx"的最后100条记录。 用户需…

Linux——磁盘分区、挂载

Linux 分区 原理介绍 原理图如下 当我们在/home目录下新建一个文件a.txt时&#xff0c;该文件实际上是存放在硬盘B的分区1中的&#xff0c;这就是图里说的&#xff0c;当进入某个目录&#xff0c;可以进入到该目录下挂载的分区里的意思 硬盘说明 应用实例&#xff1a;挂载一个…

镁稀土中间合金的耐腐蚀性

镁稀土中间合金&#xff0c;也称作镁稀土合金&#xff0c;是一种重要的合金材料&#xff0c;由镁、稀土元素(如镧、铈、镨、钕、钷、钐、铕、钆、铽、镝、钬、铒、镱、镥等)以及其他可能的金属元素(如铝、锶、锆、钙等)组成。以下是对镁稀土中间合金的详细介绍&#xff1a; 一、…

六、索引的数据结构

文章目录 1. 为什么使用索引2. 索引及其优缺点2.1 索引概述2.2 优点2.3 缺点3. InnoDB中索引的推演3.1 索引之前的查找3.1.1 在一个页中的查找3.1.2 在很多页中查找3.2 设计索引3.2.1 一个简单的索引设计方案3.2.2 InnoDB中的索引方案3.3 常见索引概念3.3.1 聚簇索引3.3.2 二级…

CPU Study - Recovery when Prediction Fails

参考来源&#xff1a;《超标量处理器设计》—— 姚永斌 分支预测失败时&#xff0c;这条分支指令之后的所有指令都处在了错误的路径上&#xff08;mis-prediction&#xff09;。 这些指令都会被抹除掉 &#xff0c;从而造成很多bubble&#xff0c;降低处理器性能&#xff0c;称…

数学概念算法-打印100以内的素/质数

素数&#xff1a;只能被1和自己整除的数 暴力破解 埃氏筛选 找到第一个数字&#xff0c;如果它是素数&#xff0c;则把它的倍数全部划掉 比如数字2是素数&#xff0c;那么 4,6,8,10,12。这些数字肯定不是素数&#xff0c;所以不用再考虑&#xff0c;直接划掉即可 第二步&#…

ROS理论与实践学习笔记——3 ROS运行管理之ROS话题名称设置

名称重映射是为名称起别名&#xff0c;为名称添加前缀&#xff0c;该实现比节点重名更复杂些&#xff0c;不单是使用命名空间作为前缀、还可以使用节点名称最为前缀。两种策略的实现途径有多种: &#xff08;1&#xff09;rosrun 命令 &#xff08;2&#xff09;launch 文件 …

camody卡魔迪-准备新一年双十一推出iPhone快充充电宝

随着双十一购物节的临近&#xff0c;各大品牌纷纷推出创新产品以吸引消费者的目光。近日&#xff0c;知名科技品牌Camody卡魔迪宣布将在今年双十一期间推出一款全新的iPhone快充充电宝。这款充电宝不仅具备快速充电功能&#xff0c;还兼具时尚设计和便携性&#xff0c;预计将成…

ArcGIS中分区统计栅格值前需要进行投影吗(在投影坐标系下进行吗),为什么?

最近&#xff0c;我接到了一个分区统计栅格数值前需要进行投影&#xff0c;或者说是必须需要在投影坐标系下进行吗的咨询。 答案是不需要刻意去变。 但是他又说他把地理坐标系下分区统计结果与投影坐标系下的分区统计结果分别做了一遍&#xff0c;并进行了对比&#xff0c;两个…

通过docker安装thingsboard需要的postgresql数据库

1、下载docker的包 docker run --name postgresql -e POSTGRES_PASSWORDXXX123 -d registry.openanolis.cn/openanolis/postgres:10.21-8.6 进入postgresql&#xff0c;创建数据库 [rootlocalhost ~]# docker exec -it postgresql bash [root0940f42b2263 /]# su - postgre…

9.10Mean-Shift分割算法

基本概念 Mean-Shift 分割算法是一种非参数的特征空间点集的迭代查找算法&#xff0c;主要用于估计概率密度函数的模式。在计算机视觉中&#xff0c;它常用于颜色图像分割和目标跟踪。它通过迭代地移动每个数据点到其邻域内密度最大的地方&#xff0c;从而找到数据点的模式&am…

基于单片机的非接触智能测温系统设计

本设计主要由单片机STC8A8K64S4A12、OLED显示屏、非接触式测温模块MLX9061、无线通讯模块ESP8266以及声光报警模块等构成。系统通过非接触式测温模块MLX9061测量当前人员温度&#xff0c;温度通过OLED显示屏进行实时显示&#xff0c;当被测温度高于阈值&#xff0c;声光报警模块…