改善C#程序的157个建议——泛型

    • 32:总是优先考虑泛型
      • 使用泛型的优势:
        • 可重用型
        • 类型安全
        • 高效率
      • 可以把泛型参数T理解为一个占位符,在C#泛型编译生成的IL代码中,T就是一个占位符的角色,在运行时,JIT会用实际代码中输入的T类型来代替T,也就是说,在由JIT生成的本地代码中,已经使用了实际的数据类型。
    • 33:避免在泛型中声明静态成员
      • 泛型类型中的静态成员
        • T指定不同的数据类型,泛型类型也会变成不同的数据类型,在他们之间是不共享静态成员的。
        • 不过,若T所指定的数据类型是一直的,那么两个泛型对象还是可以共享静态成员的。
        • 为了规避以上两点引起的混淆,建议不在泛型类型中声明静态成员。
      • 非泛型类型中的泛型方法并不会在运行时的本地代码中生成不同的类型
    • 34:为泛型参数设定约束
      • 约束让泛型参数有了更多的行为和属性。
      • 有以下约束:
        • 指定是值类型: where T : struct
        • 指定是引用类型:where T : class , 注object不能用来作为约束
        • 指定具有无参数的公共构造方法: where T : new()
        • 指定参数派生自指定的基类
        • 指定参数实现指定的接口
        • 指定参数派生自U提供的参数: where T :U
        • 可以对统一参数应用多个约束
    • 35:使用default为泛型类型变量指定初始值
      • 值类型变量的默认初始值是0值,引用类型变量的默认初始值是null值,所以要让编译器接受一个泛型参数指定一个初始值,最妥当的办法就是使用default关键字。
      • 使用方法: T t = default(T) ;
    •  
posted @ 2021-09-02 10:21  ChristalXue  阅读(68)  评论(0)    收藏  举报