先前做项目中常用IList<WfmUserName>的类型,知道这是泛型,但没有对泛型系统深刻的加以学习,今天
抽空学习了下:
1 泛型是CLR(通用语言运行时)2.0的一个新特性.
2 为什么会出现泛型呢?泛型的提出是为解决哪类问题的呢?
----------在CLR1.0中要创建一个灵活的类或方法(该类或方法在编译期间不知道使用什
么类),就必须以Object类(Object类在编译期间没有类型安全性的)为基础,因此必须进行强制类型
转换。另外,给值类型使用Object类会有性能损失.所以泛型的出现可以轻松应对
3 泛型的优缺点:
1性能提高
我们知道装箱和拆箱操作很容易使用,但性能损失比较大.泛型的使用避免了装箱和拆箱的
操作. 例如下面的一小段代码:
使用泛型可以改为下面的代码:
2是类型安全的
还那ArrayList做说明,看下面列子
可以发现上面的代码编译器能够编译通过,但在程序运行的时候会在迭代方法中抛出异常,错误应
该是尽早发现,使用下面的代码后你会发现在编译阶段错误就被发现了
对某些书里头讲到的二进制代码的重用,代码扩展以及命名约定不是很了解
创建泛型类的注意事项:
在创建泛型类时,需要一些其他C#关键字。(eg不能把null赋予泛型类型,可以使用default关键字.根据泛型类型是引用类型还是值类型,default关键字用于将泛型类型初始化为null或0。如果泛型类型不需要Object类的功能,但需要调用泛型类上的某些特定方法,就可以定义约束
泛型类的静态成员只能在类的一个实例中共享