C# 泛型概念及用法详解
C# 泛型概念及用法详解一定义泛型是 C# 的一种语言特性允许在定义类、接口、方法、委托时不指定具体的数据类型而是用一个类型参数Type Parameter来代替等到使用时再指定具体类型。这会大大简化我们的代码结构同时让后期维护变得容易。废话一大堆那么泛型到底长啥样看到下面代码中的 “T” 没有那就是泛型。static void Main(string[] args) { Program program new Program(); program.MyClassMethod(100); program.MyClassMethod2int(100); } public void MyClassMethod(int a) { Console.WriteLine(a); } public void MyClassMethod2T(T a) { Console.WriteLine(a); Console.WriteLine(a.GetType().ToString()); }二为什么要用泛型重载是 “每种类型写一遍”泛型是 “写一遍所有类型通用”类型少的时候重载还行类型多了泛型才是正道 —— 代码复用、维护方便、类型安全。namespace 泛型 { class Program { static void Main(string[] args) { int result Test.Add(3, 4); Console.WriteLine(result); Console.ReadKey(); } } public class Test { public static int Add(int x, int y) { return x y; } public static int Add(string x, string y) { return int.Parse(x) int.Parse(y); } } }那么下面就用泛型的方式来封装一下这个加法运算。注意一下写法在 Add 后面要加上 这句不然会报错。public int AddT(T x, T y) { return 0 ; }三、泛型和 Object 类型的区别下面是一些介绍C# 中Object是一切类型的基类可以用来表示所有类型而泛型是指将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。一句话总结 object 是 “万能盒子”什么都能装但装进去就不知道是什么了用的时候要小心泛型是 “模板盒子”你指定装什么它就装什么编译器帮你盯着不会装错。C# 中泛型是 “通用又安全”一份代码多种类型能用编译器帮你检查类型不用装箱拆箱性能还好。**object缺点**1.因为什么都能装编译器不检查写错了也不报错运行时才崩。​ 2.值类型int、double、结构体装到 object 里要复制到堆上取出来又要复制回 栈上频繁装箱拆箱导致性能损耗。object优点1. object类型可以用来引用任何类型的实例​ 2. object类型可以存储任何类型的值3.可以定义object类型的参数​ 4.可以把object作为返回类型。四、泛型类定义整个类都是泛型的类里的字段、方法都可以用类型参数 T。public class MyListT { private ListT _list new ListT(); public int Count _list.Count; public void Add(T item) { if (item ! null) _list.Add(item); } } // 使用 MyListint intList new MyListint(); intList.Add(1); intList.Add(3); Console.WriteLine(intList.Count); // 2你天天用的List就是泛型类。五泛型类的继承// 方式1子类也是泛型T往下传 public class Test1T { } public class Test2T : Test1T { } // 方式2子类指定父类的具体类型 public class Test1T { } public class Test2T : Test1int { } // 父类T固定为int六、泛型方法**定义**只有方法是泛型的类不一定是泛型的。public class Tool { // 泛型方法只有这个方法用T public static T GetTT(T a) { return a; } }七、泛型接口**定义:**接口也是泛型的。public interface IFaceT { void SayHi(T msg); }两种实现方式// 方式1普通类实现指定具体类型 public class MyClass1 : IFacestring { public void SayHi(string msg) { Console.WriteLine(msg); } } // 方式2泛型类实现T继续往下传 public class MyClass2T : IFaceT { public void SayHi(T msg) { Console.WriteLine(msg); } }八、泛型约束重点什么是泛型约束给类型参数 T 定规矩告诉编译器 T 必须满足什么条件这样方法里才能放心调用 T 的成员。六种约束约束写法含义值类型约束where T : structT 必须是值类型引用类型约束where T : classT 必须是引用类型无参构造约束where T : new()T 必须有无参构造函数基类约束where T : 基类名T 必须是该基类或其子类接口约束where T : 接口名T 必须实现该接口裸类型约束where T : UT 必须是 U 或 U 的子类九约束顺序基类 → 接口 → new()基类放最前面接口放中间new()放最后。多个约束示例public class MyClassT, K, V, W, X, Y where T : struct // T必须是值类型 where K : class // K必须是引用类型 where V : IFaceT // V必须实现IFaceT接口 where W : K // W必须是K或K的子类 where X : class, new() // X必须是引用类型 有无参构造 where Y : MyClass2 // Y必须是MyClass2或其子类 { // ... }十、泛型 反射进阶应用应用场景通用比较两个对象的所有属性值是否相同不用写一堆 if-else。核心思路用反射获取对象的所有属性逐个比较递归处理嵌套对象。public static bool CompareTypeT(T oneT, T twoT) { Type type1 oneT.GetType(); Type type2 twoT.GetType(); if (!type1.Equals(type2)) return false; PropertyInfo[] props1 type1.GetProperties(); PropertyInfo[] props2 type2.GetProperties(); // 遍历所有属性比较 for (int i 0; i props1.Length; i) { object val1 props1[i].GetValue(oneT, null); object val2 props2[i].GetValue(twoT, null); if (!val1.Equals(val2)) return false; } return true; }好处写一个方法所有类型的对象都能比不用每种类型写一遍。十一、一句话速记卡泛型 类型参数化写一遍代码所有类型通用泛型类 整个类都是模板List 就是泛型方法 只有方法是模板泛型接口 接口是模板实现时指定类型泛型委托 委托参数是模板泛型约束 给 T 定规矩struct/class/new ()/ 基类 / 接口vs Object 泛型类型安全、不用装箱、不用强转

相关新闻

【CTF杂项】 常见文件头文件尾完整汇总

【CTF杂项】 常见文件头文件尾完整汇总

CTF杂项 常见文件头&文件尾完整汇总 一、基础概念 文件头(魔数 Magic Number):文件最开头固定十六进制字节,用来识别文件类型,CTF常用于隐写分离、伪加密、文件拼接、丢头修复。文件尾:文件末尾固定标识…

2026/8/6 19:20:17 阅读更多 →
MySQL的卸载安装与环境配置

MySQL的卸载安装与环境配置

一、判断本地电脑中是否有 MySQL 的环境在开始界面输入服务查看是否有 MySQL 的服务,查看状态是否为正在运行。服务列表中 MySQL 显示正在运行说明电脑中有 MySQL 的环境。二、卸载 MySQL1. 停止服务列表中 MySQL 的运行2. 找到原有的 MySQL 的安装目录,…

2026/8/6 19:19:17 阅读更多 →
NS-USBLoader终极指南:Switch文件传输与RCM注入的完整解决方案

NS-USBLoader终极指南:Switch文件传输与RCM注入的完整解决方案

NS-USBLoader终极指南:Switch文件传输与RCM注入的完整解决方案 【免费下载链接】ns-usbloader Awoo Installer and GoldLeaf uploader of the NSPs (and other files), RCM payload injector, application for split/merge files. 项目地址: https://gitcode.com/…

2026/8/6 19:19:17 阅读更多 →

最新新闻

计算机毕业设计之基于Spring Boot的养老服务推荐系统的设计与实现

计算机毕业设计之基于Spring Boot的养老服务推荐系统的设计与实现

当前,由于人们生活水平的提高和思想观念的改变,然后随着经济全球化的背景之下,互联网技术将进一步提高社会综合发展的效率和速度,互联网技术也会涉及到各个领域,于是传统的管理方式对时间、地点的限制太多,…

2026/8/6 23:42:11 阅读更多 →
技术评测:SSH-tools如何解决日常运维中的SSH管理痛点

技术评测:SSH-tools如何解决日常运维中的SSH管理痛点

技术评测:SSH-tools如何解决日常运维中的SSH管理痛点 【免费下载链接】ssh-tools Making SSH more convenient 项目地址: https://gitcode.com/gh_mirrors/ss/ssh-tools 在复杂的分布式系统和多云环境中,SSH协议作为系统管理员和开发人员最常用的…

2026/8/6 23:42:10 阅读更多 →
Java程序员收藏!3-6个月转型AI大模型实战路线,轻松拿高薪!

Java程序员收藏!3-6个月转型AI大模型实战路线,轻松拿高薪!

Java程序员转型AI大模型前景广阔,文章指出大模型应用层急需具备工程化落地能力的人才。建议Java程序员不要盲目追求底层算法研发,而是优先选择AI应用工程师、大模型后端开发、智能体平台开发或AI Infra工程师等岗位。文章提供了分阶段学习路线&#xff0…

2026/8/6 23:42:10 阅读更多 →
华为MetaERP WIP 会计分类(WIP Accounting Class)是 EBS 车间成本核算的“科目路由表“——它决定了工单在发料、报工、完工、关闭每一个动作上借贷哪个 GL 账户。下面给

华为MetaERP WIP 会计分类(WIP Accounting Class)是 EBS 车间成本核算的“科目路由表“——它决定了工单在发料、报工、完工、关闭每一个动作上借贷哪个 GL 账户。下面给

WIP 会计分类(WIP Accounting Class)是 EBS 车间成本核算的"科目路由表"——它决定了工单在发料、报工、完工、关闭每一个动作上借贷哪个 GL 账户。下面给你 EBS R12 中完整的配置路径与字段逻辑。一、配置入口与前置条件职责:Work…

2026/8/6 23:42:10 阅读更多 →
毕业论文降重工具怎么选符合院校答辩要求

毕业论文降重工具怎么选符合院校答辩要求

不少应届毕业生临近答辩才发现,论文重复率距离院校要求还有不小差距,修改多次仍然达不到标准。2026年国内多数院校下调了毕业论文重复率合格阈值,同时新增了AI生成内容筛查环节,重复率或AI检测不达标,直接会被要求返修…

2026/8/6 23:42:10 阅读更多 →
ChatCompletion API多轮对话优化实战与避坑指南

ChatCompletion API多轮对话优化实战与避坑指南

1. 项目概述ChatCompletion API作为当前大模型交互的核心接口,其多轮对话实现机制直接影响着对话系统的连贯性和上下文理解能力。在实际开发中,约78%的对话中断问题源于消息结构处理不当,而正确的消息编排可使对话质量提升3倍以上。我曾在电商…

2026/8/6 23:41:10 阅读更多 →

日新闻

深入解析LimboAI C++内核:架构设计与性能优化实战

深入解析LimboAI C++内核:架构设计与性能优化实战

1. 项目概述:为什么我们需要深入LimboAI的C内核?如果你是一名使用Godot引擎的游戏开发者,尤其是对AI行为逻辑有较高要求的项目,那么LimboAI这个名字你大概率不会陌生。它作为Godot 4生态中一个备受瞩目的行为树与状态机插件&#…

2026/8/6 0:00:06 阅读更多 →
Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

1. 项目概述与核心思路大家好,我是老张,一个在游戏开发一线摸爬滚打了十多年的老码农。今天咱们接着聊《空洞骑士》风格2D动作游戏的Demo制作。上一期我们搭好了基础框架,处理了角色移动和碰撞,这一期,我们要让游戏世界…

2026/8/6 0:00:06 阅读更多 →
被动防火门市场前景发展趋势

被动防火门市场前景发展趋势

被动防火门依靠材质结构、密闭构造阻隔烟火蔓延,无需电控启动,是建筑被动消防系统核心构件,行业依托新规管控、城市更新、工业安全升级迎来稳定扩容,整体朝着合规化、专项化、低碳化、智能化方向发展。现阶段 GB12955‑2024 新版国…

2026/8/6 0:00:06 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →