C# _泛型
目录
泛型是什么?
泛型的主要优势
创建一个泛型类
泛型方法
泛型是什么?
泛型是通过参数化来实现同一份代码上操作多种数据类型 利用参数类型将参数的类型抽象化 从而实现灵活的复用总结: 通过泛型可以实现在同一份代码上操作多种数据类型的逻辑 将类和类中的成员定义为泛型 在使用时再指明类型 从而实现对不同数据类型的操作
在 C# 中,泛型(Generics)是一种允许你定义类型安全的数据结构和方法,而无需指定具体数据类型的技术。这使得代码可以更灵活、更通用,同时保持类型安全性。
泛型的主要优势
- 类型安全:在编译时就能检测到类型不匹配的错误,无需运行时类型转换
- 代码重用:一份代码可以处理多种数据类型
- 性能提升:避免了装箱和拆箱操作
- 清晰的代码:明确表达代码的意图
创建一个泛型类
//泛型类 泛型类可以在类中的任意成员中使用 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");