zoukankan      html  css  js  c++  java
  • 泛型

    什么是泛型

      泛型是指可传入任意类型,在调用时指定类型

      泛型方法:一个方法满足了不同方法的需求

      泛型类:一个类满足不同类的需求

      泛型接口:一个接口满足不同类型接口的需求

      泛型委托:一个委托满足不同委托的需求

    设计思想:延迟声明,在声明时定义占位符,在调用时确定类型

    泛型约束

    基类约束:约束这个T 就是People; 就约束只能传递People或者People的子类 

    接口约束:约束这个T 是ISports接口的实现类 

    无参数构造函数约束:传入的参数必须有拥有一个无参数构造函数

    值类型约束:只能传入值类型的参数

    引用类型约束:只能传入引用类型的参数

    语法:

    1  public static T ShowClass<T>(T tParameter)
    2     where T : People
    3    //where T : Isports
    4    //where T : new()
    5    //where T : struct
    6    //where T : class
    7    {
    8    }

      泛型约束可以解决泛型类型不安全的问题,比如在声明传入后方法内出现类型解析错误的情况(编译后报错),约束后可以在编译前定位错误(增加代码的规范性和健壮性)

    泛型缓存

      泛型缓存本质是静态泛型类,普通静态方法构造函数只执行一遍而静态泛型类会根据传入的类型生成不同的副本。

    实际应用

      

     1 private T GetControlInfo<T>(string channel="")
     2  {
     3             Type type = typeof(T);
     4             if (type.Name.Equals("LBLed"))
     5             {
     6                 switch (channel)
     7                 {
     8                     case "0": return (T)(object)Led_ChAndNum_1;
     9                     case "1": return (T)(object)Led_ChAndNum_2;
    10                     case "2": return (T)(object)Led_ChAndNum_3;
    11                     case "3": return (T)(object)Led_ChAndNum_4;
    12                     case "4": return (T)(object)Led_ChAndNum_5;
    13                     case "5": return (T)(object)Led_ChAndNum_6;
    14                     case "6": return (T)(object)Led_ChAndNum_7;
    15                     case "7": return (T)(object)Led_ChAndNum_8;
    16                     default:
    17                         break;
    18                 }
    19             }   
                    else if (type.Name.Equals("CheckBoxX"))
    31             {
    32                 switch (channel)
    33                 {
    34                     case "0": return (T)(object)Chk_Channel_1;
    35                     case "1": return (T)(object)Chk_Channel_2;
    36                     case "2": return (T)(object)Chk_Channel_3;
    37                     default:
    38                         break;
    39                 }
    40             }
    41 
    42             return (T)new object();
    43  }

      泛型方法也是一种重载,实现了传入不同类型转换成不同需要的结果。

      

  • 相关阅读:
    OK335x mksd.sh hacking
    Qt jsoncpp 对象拷贝、删除、函数调用 demo
    OK335xS 256M 512M nand flash make ubifs hacking
    Qt QScrollArea and layout in code
    JsonCpp Documentation
    Qt 4.8.5 jsoncpp lib
    Oracle数据库生成UUID
    freemarker得到数组的长度
    FreeMarker中if标签内的判断条件
    freemarker语法
  • 原文地址:https://www.cnblogs.com/shipengda/p/13280872.html
Copyright © 2011-2022 走看看