csharp:类:泛型

这是本文档旧的修订版!


90-8:泛型 <T>

38-15-1:概念 使用在类与方法上、 使用占位符T 来代表某种类型,编译期间决定其具体类型 类名称后面加 <T> 代表该类就是泛型类、不一定是T <M> <Myt> …… 泛型在实例化时、或使用时占位符T会被特化成指定的类型 为什么要加<T> 变成泛型类?

<T>:是类型占位符、表示还没决定具体是什么类型、先把这个位置占了、 如下例子: 当不确定类里面 是int[]类型数组 或者string[]类型数组 疑惑别的数组 38-15-1:泛型类:

      class zhan<T>
      {   //看做栈内存空间
          private T[] zhan_Cpu = new T[300] ;
          //将数据存入栈的方法
          public void set(T valu , int index)
          {
              zhan_Cpu[index] = valu; //数据入栈
          }
          //将数据取出栈的方法
          public T get(int index)
          {
              return zhan_Cpu[index];//数据取出
          }
      }

使用: static void Main(string[] args) { 对泛型类zhan的特化、特化为int类型的类

          zhan<int> int_data = new zhan<int>();
          // 此时int_data对象 内的数组zhan_Cpu读写都是int类型
          zhan<string> str_data = new zhan<string>() ;
          // 此时str_data对象 内的数组zhan_Cpu读写都是string类型
          zhan<double> doub_data = new zhan<double>() ;
          // 此时doub_data对象 内的数组zhan_Cpu读写都是double类型
      }

38-15-1:泛型格式:

格式无返回值:

           void fangfa<T> ( T a  ,  T b)
          {
          }

格式有返回值:

      public  T fangfa1<T>(T a, T b)
      {
          return a + b; //报错运算符不能用于两个T类型的操作数
                        //编译器会在编译时会对参数ab校验是否正确、
          dynamic da = a; //dynamic将类型校验推延到运行时、
          dynamic db = b; //当运行时已经为T类型赋予了int或者double类型
          return da + db;
      }

dynamic 动态的[当运行时根据传过来的值确定其类型]  daɪˈnæ mɪk

38-15-1:多样化泛型

class Program {

  static void Main(string[] args)
  {   
    reyy<int, string, double> Fanxing = new reyy<int, string, double>();
    Fanxing.LeiXing_1[1] = 500;
    Fanxing.LeiXing_2[1] = "ABSD";
    Fanxing.LeiXing_3[1] = 63.588;

} }

      //多样化泛型类
      class reyy<T , U , F>
      {   
          public T[] LeiXing_1 = new T[300];
          public U[] LeiXing_2 = new U[300];
          public F[] LeiXing_3 = new F[300];
      }

38-15-1:泛型的继承-1普通类继承泛型

泛型可以被继承 例如:继承时特化泛型类型

  class Program
  {
      static void Main(string[] args)
      {
          teacher Teacher = new teacher();//实例化老师对象
          Teacher.id = 550346;//老师作为人类的id
      }
  }
  class people<T>
  {
      //编号属性
      public T id { get; set; } 
  }
  class teacher : people<int> 
  //继承一个泛型父类、继承的同时特化泛型
  {
  }

38-15-1:泛型的继承-2泛型继承泛型

泛型继承泛型、当子类被实例化时特化的类型也会传导给父类

  class Program
  {
      static void Main(string[] args)
      {
          teacher<int> Teacher = new teacher<int>();//实例化老师对象
                                                    //把子类特化int类型传导给父类T
          Teacher.id = 550346;//老师作为人类的id
      }
  }
  class people<T>
  {
      //编号属性
      public T id { get; set; } 
  }
  class teacher<B> : people<B>
  {
      //当无法确定子类的类型时、可以把子类看做泛型类、
      //当子类实例化时、特化的类型B也会传导给父类T
  }

38-15-1:总结

该主题尚不存在

您访问的页面并不存在。如果允许,您可以使用创建该页面按钮来创建它。

  • csharp/类/泛型.1759048453.txt.gz
  • 最后更改: 2025/09/28 16:34
  • 张叶安