zoukankan      html  css  js  c++  java
  • 泛型和集合

    集合: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,这里的代码实现了类型安全。

  • 相关阅读:
    wenti
    vim
    在两种情况下设备与驱动会发生匹配
    用Qt图形视图框架开发拼图游戏
    Android RecyclerView添加Header头部
    Android Glide加载图片时转换为圆形、圆角、毛玻璃等图片效果
    Java 集合深入理解(4):List<E> 接口
    你们公司有职业通路图吗
    linux系统性能监控--内存利用率
    linux系统性能监控--CPU利用率
  • 原文地址:https://www.cnblogs.com/weihengblogs/p/2740914.html
Copyright © 2011-2022 走看看