zoukankan      html  css  js  c++  java
  • 泛型

    泛型的优点

    1.性能

    泛型类在编译器中生成T类型的类,不会进行装箱和拆箱。
    /*
    对值类型使用非泛型集合类时,把值类型转换为引用类型,和把引用类型转换为值类型时,需要进行装箱和拆箱操作。
    装箱和拆箱操作性能损失较大。
    */
    ArrayList list = new ArrayList();
    list.Add(1);    //add方法的参数是object,装箱
    list.Add("1");
    int a = (int)list[0];    //注意这里需要强制转换 - 拆箱

    2.类型安全

     泛型类List<T>中,泛型类型 T 定义了允许使用的类型。

    3.二进制代码的重用

    泛型类定义一次,可以使用不同的类型实例化。

    4.代码的扩展

    值类型使用泛型类,编译器会为每个值类型生成一个新类,因为值类型对内存大小的要求不同。

    引用类型使用泛型类,共享一个本地类的所有代码,因为引用类型在实例化的泛型类中只需4个字节,就可以引用一个实例。

    创建泛型类

    泛型类的定义和一般类相同,只是要使用类型T做泛型类型的声明。

    泛型类的功能

    1.默认值 default

    创建泛型类时,内部对泛型类型 T 的初始化。

    T t = default(T); //default 关键字,将null赋予应用类型,0赋予值类型
    

      

    2.约束

    创建泛型类时,对泛型类型 T 的要求。

    class MyClass<T> where T : IDisposable, new()  //可以有多个约束
    {
     
    }
    
    泛型约束
    约束 说明
    where T : strust   类型T必须是值类型
    where T : class 类型T必须是引用类型
    where T : IFoo   类型T必须实现IFoo接口
    where T : Foo 类型T必须是Foo的派生类
    where T : new() 类型T必须有一个默认构造函数
    where T1 : T2 泛型类中有多个泛型类型,其中类型T1是类型T2的派生类  

    3.继承

    泛型类和类一样,可以继承和被继承。方法可以是抽象的,虚拟的。

     4.静态成员

    1.泛型类型的静态成员比较特殊。因为编译器会为值类型的泛型类创建一个新类,所以,泛型类中的静态成员并不能共享。

    泛型接口

    泛型接口的定义和一般接口相同,只是要使用类型T做泛型类型的声明。

    泛型接口常常存在一个较老的非泛型版本,以后要进来使用泛型版本,因为可以避免拆装箱。

     泛型接口的协变与逆变(不懂)

    泛型结构(可空类型)

    Nullable<T> 就是 int? 可空类型

    泛型方法

    1.普通泛型方法

    public void Func<T>(T t) where T : class
    {
        
    }
    

    2.带委托的泛型方法

    public void Func<T>(Action<T> action) where T : class
    {
     
    }
    

      

  • 相关阅读:
    面试题19:包含min函数的栈
    编程之美 计算字符串的相似度
    android 数据持久化——I/O操作
    SSD磁盘,CPU居高不下,高并发的情况下,是不是mysql解析器耗费的cpu资源高?
    Eclipse、MyEclipse优化,提高运行速度
    Sonar入门学习
    Oracle 生成指定范围内随机日期
    ios中的GCD
    如何使用Win8系统自带杀毒软件
    安装Ubuntu版本linux过程中没有提示设置root用户密码问题的解决办法
  • 原文地址:https://www.cnblogs.com/lztwj/p/7224935.html
Copyright © 2011-2022 走看看