generics (范型)的使用
什么是范型?
u System.Collections.Generic命名空间包含了范型集合需要的类和接口;
u 我们在写程序的时候, 经常需要这种东西: 可变长度的Array, 比如说一个string[]
而事实上定义了一个string[]并初始化后那么它的长度就固定了, Array根本做不到. 如果非要实现这种功能, 那唯一合理的办法只有定义一个ArrayList, 这个类似于vector类型的东西可以实现可变长度的Array, 但是带来几个问题:
l 1. ArrayList里面操作的都是object类型, 这意味着如果我放一个string进去, 再当作int取出来, 这在编译阶段是不会出错的, 而在运行时才会提示转换无效
l 2. 以object方式存储时, 需要装箱和拆箱操作, 这些步骤会带来额外的性能消耗 - 而没法做到普通Array那样直接
l 3. 如果要避免前两个问题, 那么所有的需要强类型的集合类都需要分别定义, 比如XxxxCollection, 非常麻烦
u 解决办法:
l Collection<string> strCollection = new Collection<string>();
strCollection.Add("a");strCollection.Add("b");.....
l 这样strCollection就是我们需要的集合. 范型使Add/Remove等操作全部都是类型安全的, 以索引器访问时也是类型安全的, 这在编译阶段(对于VS来说可以包括编写代码的阶段)就可以反映出来.
而性能方面, 这里根本就没有装箱/拆箱的操作, 所以比原有ArrayList方式性能更高. 也没有像以前那样声明一个StringCollection之类的class, 代码上也简洁的多.
u 范型的特点
l 增加了编译时的类型检查;
l 减少了装箱和拆箱操作;
l 减少了运行时的类型检查;