泛型和集合

集合:ArrayList类,是命名空间System.Collections下的一部分,它是使用大小可按需动态增加的数组实现IList接口,但是ArrayList不是类型安全的。

  泛型集合:list类,是对ArrayList的一个完善。通常情况下建议使用泛型集合,因为这样可以获得类型安全的直接优点。

  Ilist接口:为ArrayList和List定义了一些操作方法。

  • 对于泛型技术我个人理解也不是很深入,通过这些天不断地使用,说一下我的理解。
    泛型是.NET 2.0引进的新技术,它允许我们定义代码模板,然后使用这个模板声明变量。它所在的位置大多位于System.Collections.Generic中。
    泛型引入目的:
    创建强数据类型的集合。因为泛型集合是强类型化得,所以其处理速度要比基于继承的集合模型快,代码中使用集合类的任何地方可以考虑使用泛型集合代替。
    泛型通常采用List(Of T)的形式,这里List是类型(或者类)的名字,字母T类似参数的占位符。使用List(Of T)声明变量的代码如下:
  • Dim Data as New List(Of T)
  • 称泛型是强类型集合就是说,一旦类型参数T定义好了类型,List就只能存放该类型的变量,相比ArrayList就不同了,ArrayList属于后期绑定,所以可以盛放任何类型的对象。
  • 例1.缺乏类型安全的ArrayList
  • 复制代码
    namespace TestApp
    {
    class Test
    {
    [STAThread]
    staticvoid Main(string[] args)
    {
    ArrayList list
    =new ArrayList();
    list.Add(
    3);
    list.Add(
    4);
    //list.Add(5.0);
    int total =0;
    foreach (int val in list)
    {
    total
    = total + val;
    }
    Console.WriteLine(
    "Total is {0}", total);
    }
    }
    }
    复制代码

本例中,我们建立了一个ArrayList的实例,并把3和4添加给它。然后我循环遍历该ArrayList,从中取出整型值然后把它们相加。这个程序将产生结果"Total is 7"。现在,如果我去掉下面语句的注释:

list.Add(5.0);

程序将产生如下的运行时刻异常.

注意:上面的实例,如果是用VB.NET书写的话,是不会失败的。原因在于,VB.NET不使用装箱机制,它激活一个把该double转换成整型的方法。但是,如果ArrayList中的值是不能转换成整型的,VB.NET代码还会失败。

作为一个习惯于使用语言提供的类型安全的程序员,你希望这样的问题在编译期间浮出水面,而不是在运行时刻。这正是泛型产生的原因。

例2.类型安全的泛型列表

 

复制代码
List<int> aList =new List<int>();
aList.Add(
3);
aList.Add(
4);
// aList.Add(5.0);
int total =0;
foreach(int val in aList)
{
total
= total + val;
}
Console.WriteLine(
"Total is {0}", total);
复制代码

在例2中,我编写了一个泛型的列表的例子,在尖括号内指定参数类型为int。该代码的执行将产生结果"Total is 7"。现在,如果我去掉语句doubleList.Add(5.0)的注释,我将得到一个编译错误。编译器指出它不能发送值5.0到方法Add(),因为该方法仅接受int型。不同于例1,这里的代码实现了类型安全。

posted @ 2012-10-26 12:06  盛开的雨季  阅读(247)  评论(0编辑  收藏  举报