当前位置: 首页 > news >正文

C#泛型

泛型是一种非常强大的特性,它允许程序员编写灵活的代码,同时保持类型安全。泛型的核心思想是允许类或方法在定义时不指定具体的数据类型,而是在实际使用时指定。这意味着你可以创建一个可以与任何数据类型一起工作的类或方法 

泛型类通过在类名后面添加尖括号(<T>)来定义,其中T是一个类型参数,代表将来可以被任何类型替换的占位符


  泛型;广泛的类型一般用于传递类型的,
  泛型的命名规范:以T开头的单词命名,

  <>中间类型就是传入泛型 <string> 字符串泛型
  <int> 整形的泛型
  <T>泛型类型

列子:

  //泛型使用在方法定义上.//调用泛型方法 通过<>将类型的实参进行传递,对应位置泛型形参就是这个类型Test<int>(1);//T 传递的是int 此次参数必须是int类型Test<string>("中国");//T 传递的是int 此次参数必须是string类型Test<bool>(true);//T 传递的是int 此次参数必须是bool类型
   //2调用带两个泛型参数方法Test1 传递的类型是一个Test1<int>(10, new int[] { 100});
 //3调用Test2方法 传递泛型了许 参数个数是2个Test2<int, string>(100, "中国");Test2<int, int>(100, 1000);

  Test2("中国","中国"); 泛型方法调用时候简化方法 系统自动推断类型

 重点:泛型方法调用的时候 由传入的类型决定着实参的类型 实参类型决定着形参的类型 所以泛型作用就进而体现了 参数类型不固定
 由方法调用来决定着

  //4 封装一个有返回值泛型数组 前面是内容 后面是几次;’ int[] aa= Test3<int>(6, 8);string[] ab= Test3<string>("中国", 10);Console.WriteLine(string.Join(",",aa));Console.WriteLine(string.Join(",", ab));

   泛型方法 可以传入整型的数字 也可以传入字符串 也可以数组 传入一个泛型就行
   定义方式 方法名字添加<T>方法参数类型改为T泛型的优势

   public static void Test<T>(T a){Console.WriteLine(a);}
 //2定义带两个泛型参数的方法//泛型数组: 数组可以传递整型数组 也可以字符串数组:T[] bpublic static void Test1<T>(T a ,T[] b){Console.WriteLine(a + "" + b[0]);}
  //3定义泛型方法 传递两个泛型参数 两个参数类型不一样 可以使用T a 一会可以T1  T2  T3public static void Test2<T,T1>(T a,T1 b){Console.WriteLine(a+""+b);}

 

  //4 public static T[] Test3<T>(T a,int count){T[] r = new T[count];//长度为第二个参数for(int i = 0; i < count; i++){r[i]= a;//所有的元素都是a }return r;}

运行结果: 

泛型的使用带来了多个好处:

  • 代码重用:你可以编写一次代码,然后用不同的数据类型重用它,而不需要重写代码。

  • 类型安全:泛型提供了编译时类型检查,这意味着你可以在编译时捕获类型错误,而不是在运行时。

  • 性能提升:泛型减少了需要进行类型转换的地方,这可以提高代码的性能。

泛型的使用场景

泛型在C#中的应用非常广泛,例如:

  • 泛型集合:.NET框架提供了许多泛型集合类,如List<T>Dictionary<TKey, TValue>等。

  • 泛型接口:你可以创建泛型接口,如IComparable<T>

  • 泛型委托:泛型也可以用于委托,例如Func<T, TResult>Action<T>

泛型约束

泛型约束允许你指定类型参数必须满足的条件。例如,你可以要求类型参数必须实现某个接口或继承自某个类。这提供了更多的控制,确保泛型类或方法可以安全地使用类型参数。

结论

泛型是C#中一个非常强大的特性,它提供了代码重用、类型安全和性能优化的好处。通过使用泛型,你可以编写出更加灵活和强大的代码,同时减少错误和提高效率。

相关文章:

C#泛型

泛型是一种非常强大的特性&#xff0c;它允许程序员编写灵活的代码&#xff0c;同时保持类型安全。泛型的核心思想是允许类或方法在定义时不指定具体的数据类型&#xff0c;而是在实际使用时指定。这意味着你可以创建一个可以与任何数据类型一起工作的类或方法 泛型类通过在类…...

go语言的成神之路-标准库篇-fmt标准库

目录 一、三种类型的输出 print&#xff1a; println&#xff1a; printf&#xff1a; 总结&#xff1a; 代码展示&#xff1a; 二、格式化占位符 %s&#xff1a;用于格式化字符串。 %d&#xff1a;用于格式化整数。 %f&#xff1a;用于格式化浮点数。 %v&#xff1…...

React Native的router解析

写在前面 React Native&#xff08;简称RN&#xff09;是一个由Facebook开发的开源框架&#xff0c;用于构建跨平台的移动应用程序。在RN中&#xff0c;路由&#xff08;router&#xff09;是非常重要的概念&#xff0c;它允许我们在不同的屏幕之间进行导航和切换。 以下是RN…...

Linux update-alternatives 命令详解

1、查看所有候选项 sudo update-alternatives --list &#xff08;java筛选​​​​​​​sudo update-alternatives --list java&#xff09; 2、​​​​​​​更换候选项 sudo update-alternatives --config java 3、自动选择优先级最高的作为默认项 sudo update-alterna…...

【踩坑】修复报错libcurl.so.4、LIBFFI_BASE_7.0、libssl.so.3

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ libcurl.so.4&#xff1a; sudo apt install curl -y LIBFFI_BASE_7.0: conda install libffi3.3 -y libssl.so.3: sudo apt install -y openssl li…...

python网络爬虫基础:html基础概念与遍历文档树

开始之前导入html段落&#xff0c;同时下载好本节将用到的库。下载方式为&#xff1a;pip install beautifulsoup4 一点碎碎念&#xff1a;为什么install后面的不是bs4也不是BeautifulSoup&#xff1f; html_doc """ <html><head><title>The…...

【已解决】MacOS上VMware Fusion虚拟机打不开的解决方法

在使用VMware Fusion时&#xff0c;不少用户可能会遇到虚拟机无法打开的问题。本文将为大家提供一个简单有效的解决方法&#xff0c;只需删除一个文件&#xff0c;即可轻松解决这一问题。 一、问题现象 在MacOS系统上&#xff0c;使用VMware Fusion运行虚拟机时&#xff0c;有…...

经典视觉神经网络1 CNN

一、概述 输入的图像都很大&#xff0c;使用全连接网络的话&#xff0c;计算的代价较高&#xff0c;图像也很难保留原本特征。 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种专门用于处理具有网格状结构数据的深度学习模型。主要应用…...

一些硬件知识【2024/12/6】

MP6924A: 正点原子加热台拆解&#xff1a; PMOS 相比 NMOS 的缺点&#xff1a; 缺点描述迁移率低PMOS 中的空穴迁移率约为电子迁移率的 1/3 到 1/2&#xff0c;导致导通电流较低。开关速度慢由于迁移率较低&#xff0c;PMOS 的开关速度比 NMOS 慢&#xff0c;不适合高速数字电…...

网络安全法-网络安全支持与促进

第二章 网络安全支持与促进 第十五条 国家建立和完善网络安全标准体系。国务院标准化行政主管部门和国务院其他有关部门根据各自的职责&#xff0c;组织制定并适时修订有关网络安全管理以及网络产品、服务和运行安全的国家标准、行业标准。 国家支持企业、研究机构、高等学…...

【Docker】如何在Docker中配置防火墙规则?

Docker本身并不直接管理防火墙规则&#xff1b;它依赖于主机系统的防火墙设置。不过&#xff0c;Docker在启动容器时会自动配置一些iptables规则来管理容器网络流量。如果你需要更细粒度地控制进出容器的流量&#xff0c;你需要在主机系统上配置防火墙规则。以下是如何在Linux主…...

Cesium 问题: 添加billboard后移动或缩放地球,标记点位置会左右偏移

文章目录 问题分析原先的:添加属性——解决漂移移动问题产生新的问题:所选的经纬度坐标和应放置的位置有偏差解决坐标位置偏差的问题完整代码问题 添加 billboard 后, 分析 原先的: // 图标加载 function addStation ({lon, lat, el, testName...

使用Python3 连接操作 OceanBase数据库

注&#xff1a;使用Python3 连接 OceanBase数据库&#xff0c;可通过安装 PyMySQL驱动包来实现。 本次测试是在一台安装部署OBD的OceanBase 测试linux服务器上&#xff0c;通过python来远程操作OceanBase数据库。 一、Linux服务器通过Python3连接OceanBase数据库 1.1 安装pyth…...

SpringBoot该怎么使用Neo4j - 优化篇

文章目录 前言实体工具使用 前言 上一篇中&#xff0c;我们的Cypher都用的是字符串&#xff0c;字符串拼接简单&#xff0c;但存在写错的风险&#xff0c;对于一些比较懒的开发者&#xff0c;甚至觉得之间写字符串还更自在快速&#xff0c;也确实&#xff0c;但如果在后期需要…...

Flutter如何调用java接口如何导入java包

文章目录 1. Flutter 能直接调用 Java 的接口吗&#xff1f;如何调用 Java 接口&#xff1f; 2. Flutter 能导入 Java 的包吗&#xff1f;步骤&#xff1a; 总结 在 Flutter 中&#xff0c;虽然 Dart 是主要的开发语言&#xff0c;但你可以通过**平台通道&#xff08;Platform …...

Redis 数据结构(一)—字符串、哈希表、列表

Redis&#xff08;版本7.0&#xff09;的数据结构主要包括字符串&#xff08;String&#xff09;、哈希表&#xff08;Hash&#xff09;、列表&#xff08;List&#xff09;、集合&#xff08;Set&#xff09;、有序集合&#xff08;Sorted Set&#xff09;、超日志&#xff08…...

day1:ansible

ansible-doc <module_name>&#xff08;如果没有网&#xff0c;那这个超级有用&#xff09; 这个很有用&#xff0c;用来查单个模块的文档。 ansible-doc -l 列出所有模块 ansible-doc -s <module_name> 查看更详细的模块文档。 ansible-doc --help 使用 --help …...

如何设置Java爬虫的异常处理?

在Java爬虫中设置异常处理是非常重要的&#xff0c;因为网络请求可能会遇到各种问题&#xff0c;如连接超时、服务器错误、网络中断等。通过合理的异常处理&#xff0c;可以确保爬虫的稳定性和健壮性。以下是如何在Java爬虫中设置异常处理的步骤和最佳实践&#xff1a; 1. 使用…...

阿里云盘permission denied

问题是执行 ./aliyunpan 时遇到了 Permission denied 的错误。这通常是因为文件没有执行权限。以下是解决问题的步骤&#xff1a; 检查文件权限 运行以下命令检查文件的权限&#xff1a; ls -l aliyunpan输出中会看到类似以下内容&#xff1a; -rw-r--r-- 1 user group 123…...

在 Ubuntu 24 上安装 Redis 7.0.15 并配置允许所有 IP 访问

前提条件 一台运行 Ubuntu 24 的服务器拥有 sudo 权限的用户 步骤一&#xff1a;更新系统包 首先&#xff0c;确保系统包是最新的&#xff0c;以避免潜在的依赖问题。 sudo apt update sudo apt upgrade -y步骤二&#xff1a;安装编译 Redis 所需的依赖 Redis 需要一些编译…...

2026设备管理系统选型标准(技术向):8大核心维度,适配信创+全行业场景

对于企业IT运维、采购人员而言&#xff0c;设备管理系统选型需兼顾技术适配、合规要求、落地效率与长期扩展性。本文从技术与实践角度&#xff0c;梳理出8大核心选型标准&#xff0c;重点覆盖独享云部署、Excel导入能力、自定义扩展、信创适配等关键维度&#xff0c;为技术选型…...

Claude Code 多项目 API 配置管理实践

背景 Claude Code 的项目级配置文件 .claude/settings.json 中包含 API 提供商相关的环境变量。当同时维护多个项目&#xff0c;每个项目使用不同的 API 提供商&#xff08;Anthropic 直连、OpenRouter 代理、自建转发等&#xff09;时&#xff0c;每次切换项目都需要手动修改…...

【JVM】面试题-有哪些垃圾回收器

【JVM】面试题-有哪些垃圾回收器 在JVM的内存管理中&#xff0c;垃圾收集算法是内存回收的核心逻辑与方法论&#xff0c;而垃圾收集器则是将这套方法论落地实现的具体工具。 不同的垃圾收集器针对JVM堆的不同分代&#xff08;新生代、老年代&#xff09;设计&#xff0c;具备不…...

对比自行维护与使用Taotoken在模型接入效率上的差异

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比自行维护与使用Taotoken在模型接入效率上的差异 在开发需要集成大语言模型能力的应用时&#xff0c;团队通常面临一个核心选择…...

《凰标》:写给所有被资本轻视的创作者@凤凰标志

——写给所有不被看见的创作者没有流量即是无用&#xff0c; 没有热度即是不值&#xff0c; 没有商业变现能力即是小众累赘。在资本主导的文娱评价体系里&#xff0c;这条偏见像一道隐形天花板&#xff0c;横亘在每一个草根创作者的头顶。一、被算法淹没的匠心 他们怀揣赤诚热爱…...

ChatGPT 2026新增“因果推理引擎”功能(OpenAI内部白皮书首次公开)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ChatGPT 2026“因果推理引擎”功能全景概览 ChatGPT 2026 引入的“因果推理引擎”&#xff08;Causal Reasoning Engine, CRE&#xff09;标志着大语言模型从关联统计迈向可解释性因果建模的关键跃迁。…...

微创式电子设备设计:从自动化到自主化的智能革命

1. 项目概述&#xff1a;从“工具”到“魔法”的隐形革命十几年前&#xff0c;我在《EE Times》上读到一篇由西蒙巴克&#xff08;Simon Barker&#xff09;撰写的文章&#xff0c;标题是一个直击灵魂的提问&#xff1a;“微创式电子设备在哪里&#xff1f;” 这个问题像一颗种…...

如何高效使用Fast-GitHub加速插件:5个提升GitHub访问速度的实用技巧

如何高效使用Fast-GitHub加速插件&#xff1a;5个提升GitHub访问速度的实用技巧 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 还…...

【紧急更新】Google官方刚推送的Veo 2 v2.3.1补丁深度解析:新增胶片扫描模拟、物理光晕建模与导演模式(Director Mode)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Google Veo 2 v2.3.1补丁核心特性概览 Google Veo 2 v2.3.1 补丁是面向视频生成模型推理优化与安全增强的关键更新&#xff0c;聚焦于低延迟部署、多模态对齐稳定性及合规性强化。该版本并非架构重构&a…...

别再死记硬背了!用MIDI键盘和DAW软件(如FL Studio/Cubase)5分钟搞懂钢琴音区划分

别再死记硬背了&#xff01;用MIDI键盘和DAW软件5分钟搞懂钢琴音区划分 第一次打开DAW的钢琴卷帘窗时&#xff0c;那些密密麻麻的C3、C4编号是否让你一头雾水&#xff1f;作为从乐队吉他手转型音乐制作的过来人&#xff0c;我完全理解这种困惑。传统教材里"小字组"&q…...