分类:
2009-01-06 10:36:56
泛型是2.0新增的功能,它最常见的用途是泛型集合,命名空间System.Collections.Generic 中包含了一些基于泛型的集合类,使用泛型集合类可以提供更高的类型安全性,还有更高的性能,避免了非泛型集合的重复的装箱和拆箱。
很多非泛型集合类都有对应的泛型集合类,我觉得最好还是养成用泛型集合类的好习惯,它不但性能上好而且功能上要比非泛型类更齐全。下面是常用的非泛型集合类以及对应的泛型集合类:
非泛型集合类 |
泛型集合类 |
ArrayList |
List |
HashTable |
DIctionary |
Queue |
Queue |
Stack |
Stack |
SortedList |
SortedList |
我们在1.1(C#2003中)用的比较多的集合类(非泛型集合)主要有 ArrayList类 和 HashTable类。后来2.0(C#2005中)增加了泛型功能,请通过下列代码段来理解泛型的优点:
//c#1.1版本(NET2003)
System.Collections.ArrayList arrList = new System.Collections.ArrayList();
arrList.Add(2);//int ArrayList.Add(object value)
arrList.Add("this is a test!");//int ArrayList.Add(object value)
arrList.Add(DateTime.Now);//int ArrayList.Add(object value)
int result;
for (int i = 0; i < arrList.Count; i++)
{
result += int.Parse(arrList[i].ToString());//发生InvalidCastException异常
}
/*将光标放到Add方法上时,显示“int ArrayList.Add(object value)”,表明参数需要OBJECT类型的;
*ArrayList虽然可以操作任何类型(int,string,datetime)的数据,但是,在添加时它们都需要被强制装箱成object,在读取时还要强制拆箱,
* 装拆箱的操作,对于几百条以上的大量数据来说对性能影响极大。
*/
//c#2.0版本(NET2005)
System.Collections.Generic.List<int> arrListInt = new List<int>();
arrListInt.Add(2);//void List
System.Collections.Generic.List<string> arrListString = new List<string>();
arrListString.Add("this is a test!");//void List
int result;
for (int i = 0; i < arrListInt.Count; i++)
{
result += arrListInt[i];
}
System.Collections.Generic.List<DateTime> arrListDateTime = new List<DateTime>();
arrListDateTime.Add(DateTime.Now);//void List
/*将光标放到Add方法上时,可以看出所需参数类型恰好是用户提供的*/
通过上边例子可以看出,对于客户端代码,与ArrayList 相比,使用List (T) 时添加的唯一语法是声明和实例化中的类型参数。虽然这种方式稍微增加了编码的复杂性,但好处是您可以创建一个比ArrayList 更安全并且速度更快的列表。另外,假设我们想存储某种特定类型的数据(例如Int型),如果使用ArrayList,将用户添加的所有类型的数据都强制转换成object类型,导致编译器也无法识别,只有当运行时才能发现错误;而泛型集合List