C# _泛型

目录

泛型是什么?

泛型的主要优势

创建一个泛型类

泛型方法


泛型是什么?

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

总结: 通过泛型可以实现在同一份代码上操作多种数据类型的逻辑 将类和类中的成员定义为泛型 在使用时再指明类型 从而实现对不同数据类型的操作
在 C# 中,泛型(Generics)是一种允许你定义类型安全的数据结构和方法,而无需指定具体数据类型的技术。这使得代码可以更灵活、更通用,同时保持类型安全性。

泛型的主要优势

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

创建一个泛型类

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;
    }
}

主函数

cs 复制代码
 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动态类型 可以储存任意类型的值在动态类型变量中 这些变量的类型是在运行(编译)时发生的

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

Main函数调用

cs 复制代码
 Add<string>("张三", "123");