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         减少了运行时的类型检查;

                     l          Cast
posted @ 2004-09-28 09:20  Martin XJ  阅读(1128)  评论(0编辑  收藏  举报