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  }

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

      

  • 相关阅读:
    docker安装wnameless/oracle-xe-11g并运行(手写超详细)
    QQ浏览器兼容模式问题
    list中放map的几种方式
    oracle存储函数实例
    vue中使用Element主题自定义肤色
    使用eclipse初步学习vue.js基础==》v-for的使用 ②
    使用eclipse初步学习vue.js的基本操作 ①
    发布网站的流程演示
    bookkeeper table service调研
    python爬取今日头条街拍
  • 原文地址:https://www.cnblogs.com/shipengda/p/13280872.html
Copyright © 2011-2022 走看看