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

      

  • 相关阅读:
    spring boot 配置时区差别
    Java 中序列化与反序列化引发的思考?
    Http 状态码总结
    Springboot
    ConcurrentHashMap 实现缓存类
    C#基础(二)拆箱与装箱,循环与选择结构,枚举
    C#基础知识(一)自己总结的。。。
    贪吃蛇大作战双人版加强版完整代码加详细步骤,不懂问博主 啦啦啦。
    C#数组随机生成四个随机数
    C#添加背景音乐
  • 原文地址:https://www.cnblogs.com/lztwj/p/7224935.html
Copyright © 2011-2022 走看看