目录
泛型是什么?
泛型是通过参数化来实现同一份代码上操作多种数据类型 利用参数类型将参数的类型抽象化 从而实现灵活的复用
总结: 通过泛型可以实现在同一份代码上操作多种数据类型的逻辑 将类和类中的成员定义为泛型 在使用时再指明类型 从而实现对不同数据类型的操作
在 C# 中,泛型(Generics)是一种允许你定义类型安全的数据结构和方法,而无需指定具体数据类型的技术。这使得代码可以更灵活、更通用,同时保持类型安全性。泛型的主要优势
- 类型安全:在编译时就能检测到类型不匹配的错误,无需运行时类型转换
- 代码重用:一份代码可以处理多种数据类型
- 性能提升:避免了装箱和拆箱操作
- 清晰的代码:明确表达代码的意图
创建一个泛型类
cs//泛型类 泛型类可以在类中的任意成员中使用 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; } }
主函数
csstatic 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动态类型 可以储存任意类型的值在动态类型变量中 这些变量的类型是在运行(编译)时发生的
cspublic static void Add<T>(T a, T b) { dynamic c = a; dynamic d = b; Console.WriteLine(c+d); }
Main函数调用
csAdd<string>("张三", "123");