C# 泛型分析

1、object类型是一切类型的父类。

2、通过继承,子类拥有父类的一切属性和行为,任何父类出现的地方,都可以用子类来代替。

但是上面object类型的方法又会带来另外一个问题:装箱和拆箱,会损耗程序的性能。

在泛型类型或方法定义中,类型参数是在其实例化泛型类型的一个变量时,客户端指定的特定类型的占位符。 泛型类( GenericList)无法按原样使用,因为它不是真正的类型;它更像是类型的蓝图。 若要使用 GenericList,客户端代码必须通过指定尖括号内的类型参数来声明并实例化构造类型。 此特定类的类型参数可以是编译器可识别的任何类型。 可创建任意数量的构造类型实例,其中每个使用不同的类型参数。

为什么泛型可以解决上面的问题呢?

泛型是延迟声明的:即定义的时候没有指定具体的参数类型,把参数类型的声明推迟到了调用的时候才指定参数类型。 延迟思想在程序架构设计的时候很受欢迎。例如:分布式缓存队列、EF的延迟加载等等。

泛型究竟是如何工作的呢?

控制台程序最终会编译成一个exe程序,exe被点击的时候,会经过JIT(即时编译器)的编译,最终生成二进制代码,才能被计算机执行。泛型加入到语法以后,VS自带的编译器又做了升级,升级之后编译时遇到泛型,会做特殊的处理:生成占位符。再次经过JIT编译的时候,会把上面编译生成的占位符替换成具体的数据类型。

泛型约束总共有五种。

| 约束 | s说明 | | ------------- | ------------------------------------------------------------ | | T:结构 | 类型参数必须是值类型 | | T:类 | 类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。 | | T:new() | 类型参数必须具有无参数的公共构造函数。 当与其他约束一起使用时,new() 约束必须最后指定。 | | T:<基类名> | 类型参数必须是指定的基类或派生自指定的基类。 | | T:<接口名称> | 类型参数必须是指定的接口或实现指定的接口。 可以指定多个接口约束。 约束接口也可以是泛型的。 |

1、基类约束

上面打印的方法约束T类型必须是People类型。

注意:

基类约束时,基类不能是密封类,即不能是sealed类。sealed类表示该类不能被继承,在这里用作约束就无任何意义,因为sealed类没有子类。

2、接口约束

3、引用类型约束 class

引用类型约束保证T一定是引用类型的。

4、值类型约束 struct

值类型约束保证T一定是值类型的。

5、无参数构造函数约束 new()

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

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

相关文章

在CDH中重启YARN组件时,JobHistoryServer服务启动失败

问题描述 在CDH中重启YARN组件的JobHistoryServerJobHistoryServer服务时&#xff0c;遇到如下错误。 错误一&#xff1a; Stopping JobHistory 上午10点44:40.553分 INFO AbstractService Service org.apache.hadoop.mapreduce.v2.hs.JobHistoryServer failed in state INI…

eNSP由于Cloud网卡设置错误引起的STP环路机制问题

现象&#xff1a;SW1和SW2之间直连&#xff08;vlan13&#xff09;不可达&#xff0c;但是断开左边的Cloud云的虚拟之后可达&#xff08;设置g0/0/1口为down) ,接口协议均up&#xff0c;配置正确。 查看生成树状态&#xff1a; 发现&#xff0c;SW2的g0/0/4接口为阻塞状态&…

[机器学习] Stable Diffusion初体验——基于深度学习通过神经网络的强大AI平台

文章目录 前言平台介绍 一.创建应用 Stable Diffusion WebUI初始化上传模型&#xff0c;VAE&#xff0c;lora 介绍sd模型&#xff0c;vae&#xff0c;lora模型进入应用文生图工作区调参区图生图 结语 前言 在这个信息爆炸的时代&#xff0c;AI技术正以前所未有的速度发展着。图…

微服务开发与实战Day07 - MQ高级篇

一、消息可靠性问题 首先&#xff0c;分析一下消息丢失的可能性有哪些。 消息从发送者发送消息&#xff0c;到消费者处理消息&#xff0c;需要经过的流程是这样的&#xff1a; 消息从生产者到消费者的每一步都可能导致消息丢失&#xff1a; 发送消息时丢失&#xff1a; 生产…

2024.6.17 刷题总结

2024.6.17 **每日一题** 522.最长特殊序列 Ⅱ&#xff0c;本题为前者的升级版&#xff0c;从两个字符串变成一个字符串序列了&#xff0c;所以我们需要依次枚举字符串来进行判断。先写一个判断两字符串是否相等的函数&#xff0c;然后枚举字符串逐个判断是否相等&#xff0c;若…

逆风破浪之中国半导体产业迈向全球舞台的坚实步伐

在科技飞速发展的今天&#xff0c;芯片技术已成为推动现代科技进步的核心动力。在这个全球芯片市场的激烈竞争中&#xff0c;中国作为“后来者”&#xff0c;不仅没有被淘汰&#xff0c;反而凭借惊人的发展潜力和创新能力&#xff0c;逐步崭露头角&#xff0c;成为全球芯片行业…

引调水设计乙级资质中技术负责人安排哪个专业?

引调水设计乙级资质中的技术负责人一般应具备与水利工程特别是引调水工程相关的专业背景。技术负责人通常需要满足以下条件&#xff1a; 大专以上学历&#xff1b;至少10年的设计工作经验&#xff1b;具有中级以上专业技术职称&#xff1b;在引调水工程方面具有至少2项项目设计…

Leetcode275 H指数II

题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以…

第二证券:新股“肉签”不断,今日两只申购!光伏巨头小伙伴来了

本周&#xff08;6月17日—6月21日&#xff09;&#xff0c;A股商场将迎来两只新股&#xff0c;分别为沪市主板的永臻股份和创业板的爱迪特&#xff0c;均将于本周一进行申购。 资料显现&#xff0c;永臻股份是国内领先的铝合金光伏结构件制造商&#xff0c;公司发行价为23.35…

俄罗斯方块小游戏(附源码)

游戏展示 一.导包 import turtle import random 二.定义一个Block类 定义一个Block类&#xff0c;用于表示游戏中的方块&#xff0c;包含颜色和形状。 class Block:def __init__(self, color, tiles):self.color colorself.tiles tiles三.定义了7个不同的Block对象 定义了7…

docker通过容器id查看运行命令;Portainer监控管理docker容器

1、docker通过容器id查看运行命令 参考&#xff1a;https://blog.csdn.net/a772304419/article/details/138732138 docker inspect 运行镜像id“Cmd”: [ “–model”, “/qwen-7b”, “–port”, “10860”, “–max-model-len”, “4096”, “–trust-remote-code”, “–t…

C# Winform内嵌窗体(在主窗体上显示子窗体)

在开发Winform项目中&#xff0c;经常会要切换不同的窗体。通常程序都有一个主窗体&#xff0c;在切换窗体时往往需要关闭其他子窗体&#xff0c;这个实例就来介绍MDI主窗体内嵌子窗体的实现方法。 MDI主窗体要设置一个比较重要的属性&#xff0c;IsMdiContainertrue。子窗体的…

论文阅读——ApeGNN- Node-Wise Adaptive Aggregation in GNNs for Recommendation

ApeGNN: Node-Wise Adaptive Aggregation in GNNs for Recommendation ApeGNN&#xff1a;GNN 中的节点自适应聚合以进行推荐 Abstract 近年来&#xff0c;图神经网络&#xff08;GNN&#xff09;在推荐方面取得了长足的进步。基于 GNN 的推荐系统的核心机制是迭代聚合用户-…

ThinkPHP 的老漏洞仍然被攻击者钟情

研究人员发现安全领域出现了令人不安的趋势&#xff1a;攻击者不仅对新披露的漏洞十分感兴趣&#xff0c;对已知的漏洞也丝毫不放过&#xff0c;尽管有些漏洞已经存在了好些年头&#xff0c;攻击者仍然能够通过老漏洞成功完成攻击。 典型的例子就是 ThinkPHP 远程代码执行漏洞…

轨迹优化 | 图解欧氏距离场与梯度场算法(附ROS C++/Python实现)

目录 0 专栏介绍1 什么是距离场&#xff1f;2 欧氏距离场计算原理3 双线性插值与欧式梯度场4 仿真实现4.1 ROS C实现4.2 Python实现 0 专栏介绍 &#x1f525;课程设计、毕业设计、创新竞赛、学术研究必备&#xff01;本专栏涉及更高阶的运动规划算法实战&#xff1a;曲线生成…

[Linux] Linux三剑客使用手册

一 作用 三者的功能都是处理文本&#xff0c;但侧重点各不相同。 grep更适合单纯的查找或匹配文本sed更适合编辑匹配到的文本awk功能最强大&#xff0c;但也最复杂。awk更适合格式化文本&#xff0c;对文本进行较复杂格式处理。 二 grep 2.1 命令格式 grep [option] patter…

深度学习之激活函数

激活函数&#xff08;Activation Function&#xff09;是一种添加到人工神经网络中的函数&#xff0c;旨在帮助网络学习数据中的复杂模式。在神经元中&#xff0c;输入的input经过一系列加权求和后作用于另一个函数&#xff0c;这个函数就是这里的激活函数。 1. 为什么需要激活…

【odoo | SQL】odoo使用sql语句操作数据库

概要 Odoo的SQL指的是在Odoo框架内使用SQL语句直接操作数据库。这些操作通常是通过Odoo提供的数据库游标&#xff08;self.env.cr&#xff09;来执行的。虽然Odoo主要鼓励使用其ORM&#xff08;对象关系映射&#xff09;来进行数据库操作&#xff0c;因为ORM更安全、易维护且与…

深入解析:数据库连接池的必要性与优化策略

引言 在现代的应用程序架构中&#xff0c;数据库连接池已成为提升性能和资源管理的关键组件。想象一下&#xff0c;如果没有连接池&#xff0c;每次用户请求都需建立新的数据库连接&#xff0c;这将是多么低效且资源浪费的场景。本文将深入探讨数据库连接池的必要性&#xff0…

configs

configs 部分 python import os # 导入os模块&#xff0c;用于系统级操作 emotion ["Valence"] # 定义情绪列表&#xff0c;只包含情绪维度"Valence" # 配置参数字典 config { "extract_class_label": 1, # 是否提取类别标签 &q…