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

C# _泛型

目录

泛型是什么?

泛型的主要优势

创建一个泛型类

泛型方法


泛型是什么?


泛型是通过参数化来实现同一份代码上操作多种数据类型  利用参数类型将参数的类型抽象化 从而实现灵活的复用

总结: 通过泛型可以实现在同一份代码上操作多种数据类型的逻辑  将类和类中的成员定义为泛型 在使用时再指明类型 从而实现对不同数据类型的操作

在 C# 中,泛型(Generics)是一种允许你定义类型安全的数据结构和方法,而无需指定具体数据类型的技术。这使得代码可以更灵活、更通用,同时保持类型安全性。

泛型的主要优势

  1. 类型安全:在编译时就能检测到类型不匹配的错误,无需运行时类型转换
  2. 代码重用:一份代码可以处理多种数据类型
  3. 性能提升:避免了装箱和拆箱操作
  4. 清晰的代码:明确表达代码的意图

创建一个泛型类

//泛型类  泛型类可以在类中的任意成员中使用
internal class Class2 <T>//Type的缩写 类型是不确定的 可以当做任意类型 当使用时必须指明类型
{//泛型数据public T a;public T b;//构造函数public Class2(T a, T b){this.a = a;this.b = b;Console.WriteLine(a); Console.WriteLine(b);}public T Add(){//dynamic 动态类型 可以储存任意类型的的值 在动态类型变量中,这些变量的类型是在运行时发生dynamic a = this.a;dynamic b = this.b;return a + b;}
}

主函数

 static void Main(string[] args){Class2<int> c2 = new Class2<int>(10,20);c2.Add();Class2<double> c3 = new Class2<double>(10.2, 20.3);c3.Add();Class2<string> c4 = new Class2<string >("sad","sdaa");c4.Add();}

泛型方法

创建一个泛型方法    方法名的后面加上<T>

这里的两个泛型相加,不能直接相加  因为a+b是在书写代码时检查的 而此时a和b的数据类型是不知道(直接相加会报错)  指定了泛型的类型时才能知道  
怎么解决?  

要让系统代码检查在指定了泛型的类型之后  ,这里使用动态类型 dynamic,dynamic  动态类型   可以储存任意类型的值在动态类型变量中 这些变量的类型是在运行(编译)时发生的

public static void Add<T>(T a, T b)
{dynamic c = a;dynamic d = b;Console.WriteLine(c+d);
}

 Main函数调用

 Add<string>("张三", "123");
http://www.xdnf.cn/news/16636.html

相关文章:

  • python线性回归:从原理到实战应用
  • 在 Vue 中,如何在回调函数中正确使用 this?
  • 单片机学习笔记.PWM
  • linux——ps命令
  • 【tips】小程序css ➕号样式
  • 站点到站点-主模式
  • cartographer 点云数据的预处理
  • 第二十四章:深入CLIP的“心脏”:Vision Transformer (ViT)架构全解析
  • vim的`:q!` 与 `ZQ` 笔记250729
  • 【C++算法】81.BFS解决FloodFill算法_岛屿的最大面积
  • 粒子群优化算法(Particle Swarm Optimization, PSO) 求解二维 Rastrigin 函数最小值问题
  • 本土化DevOps实践:Gitee为核心的协作工具链与高效落地指南
  • Python的垃圾回收机制
  • DAY21 常见的降维算法
  • 项目质量如何把控?核心要点分析
  • 【Pycharm】Python最好的工具
  • 【ComfyUI学习笔记04】案例学习:局部重绘 - 上
  • 服务器分布式的作用都有什么?
  • ABP VNext + GraphQL Federation:跨微服务联合 Schema 分层
  • Apache Ignite 的连续查询(Continuous Queries)功能的详细说明
  • Python的生态力量:现代开发的通用工具与创新引擎
  • 【PHP】Swoole:CentOS安装Composer+Hyperf
  • ⭐ Unity 异步加载PPT页面 并 首帧无卡顿显示
  • 【EDA】Calma--早期版图绘制工具商
  • AR辅助前端设计:虚实融合场景下的设备维修指引界面开发实践
  • 2025年06月03日 Go生态洞察:语法层面的错误处理支持
  • Java 11 新特性详解与代码示例
  • Spring Boot中的this::语法糖详解
  • 递归推理树(RR-Tree)系统:构建认知推理的骨架结构
  • 力扣热题100--------240.搜索二维矩阵