FEATURED · 精选文章

C# 泛型完整

发布时间 / 2026/9/2 15:37:10
来源 / 创域科博编辑部
栏目 / 资讯中心
C# 泛型完整 C# 泛型完整博文标题【C#零基础】泛型到底是什么通俗易懂详解泛型泛型方法/泛型类/泛型约束前言初学C#时我们经常使用ListT很多人只会调用却不理解泛型设计的意义。本文从痛点入手一步步讲解泛型概念、使用场景、优势以及泛型约束适合零基础初学者阅读。一、没有泛型之前我们面临什么问题假设现在需要封装一个“容器”用来存放数据。在泛型诞生之前主流两种写法都有明显缺陷。方式1写大量重载方法/专属类想要支持int、string、自定义Book类就要不断复制代码创建Int容器、String容器。publicvoidShow(intdata){Console.WriteLine(data);}publicvoidShow(stringdata){Console.WriteLine(data);}缺点逻辑完全一致大量重复代码后期维护成本极高。方式2使用object接收所有类型所有类型都隐式向上转为object一套方法兼容全部类型。publicvoidShow(objectdata){Console.WriteLine(data);}但是隐患非常大装箱拆箱值类型int、double存入object会产生装箱取出时拆箱存在性能损耗类型不安全编译时不会校验类型运行时才可能爆出类型转换异常可读性差无法直观看出容器里面存放什么类型。泛型诞生的目标一套逻辑复用、编译期类型安全、避免装箱拆箱性能损耗。二、什么是泛型泛型 类型参数化定义类/方法时先用占位符约定名称T代表Type代替真实数据类型等到调用代码的时候再指定具体类型。通俗理解先预留“类型空位”使用的时候再把真实类型填进去。三、泛型方法入门首选语法方法名称后面添加T声明类型占位符/// summary/// 泛型方法/// /summary/// typeparam nameT类型占位符/typeparam/// param namedata任意类型数据/parampublicstaticvoidShowT(Tdata){Console.WriteLine(data);}调用方式Showint(100);Showstring(Hello C#);ShowBook(newBook());编译器会根据传入的类型自动生成对应专属版本代码编译阶段就能校验类型是否合法。四、泛型类开发最常用List就是泛型类我们自己实现一个简易通用容器// 泛型类T代表存放数据的类型publicclassBoxT{publicTValue{get;set;}}使用示例// 存放intBoxintintBoxnewBoxint();intBox.Value99;// 存放字符串BoxstringstrBoxnewBoxstring();strBox.Value泛型测试;我们天天使用的集合ListT就是.NET内置泛型类ListintnumListnewListint();ListstringstrListnewListstring();对比老式ArrayList基于object// 不推荐可以随意混放数据ArrayListarrnewArrayList();arr.Add(1);arr.Add(测试);// 推荐泛型集合编译限制只能存放intListintlistnewListint();list.Add(1);// list.Add(测试); // 直接编译报错提前规避bug五、泛型约束 where Txxx重点考点默认情况下T可以是任意类型。泛型约束用来限制占位符T的范围告诉编译器这个类型具备哪些能力否则编译器无法直接操作T。常用约束清单where T : classT必须是引用类型类where T : structT必须是值类型结构体where T : new()T必须拥有无参公共构造函数where T : 父类名称T必须继承该父类where T : 接口名称T必须实现指定接口示例无参构造约束// 约束T必须有无参构造函数才能new T()publicstaticTCreateInstanceT()whereT:new(){returnnewT();}六、泛型三大核心优势类型安全编译阶段校验类型提前拦截类型错误避免运行时异常代码复用同一套业务逻辑支持多种数据类型消除大量重复代码高性能值类型不会发生装箱、拆箱操作相比object方案效率更高。七、初学者高频误区澄清误区泛型是动态类型纠正泛型类型在编译阶段就确定不是运行时动态切换。误区T是一个真实数据类型纠正T只是占位符Boxint、Boxstring是两个完全不同的封闭类型。误区可以直接写T num 0;纠正编译器不知道T是什么类型无法直接赋值需要添加约束后才能操作。误区泛型等价于object纠正object是统一向上转型运行时检查泛型编译生成专属代码编译期检查。八、总结泛型本质就是把数据类型当作参数实现类型参数化。解决了传统object方案类型不安全、性能差以及大量重载重复代码的痛点。日常开发使用优先级泛型方法泛型类泛型约束最常见落地场景ListT集合、通用工具类、仓储泛型封装。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻