泛型

泛型作用

  • 使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。

  • 泛型最常见的用途是创建集合类。

  • .NET Framework 类库在 System.Collections.Generic 命名空间中包含几个新的泛型集合类。应尽可能地使用这些类来代替普通的类,如 System.Collections 命名空间中的 ArrayList

  • 您可以创建自己的泛型接口、泛型类、泛型方法、泛型事件和泛型委托。

  • 可以对泛型类进行约束以访问特定数据类型的方法。

  • 关于泛型数据类型中使用的类型的信息可在运行时通过使用反射获取。

    泛型是如何实现的?

    在.NET 2.0中,泛型在IL(中间语言)和CLR本身中具有本机支持
    编译泛型类时,就像编译其他类一样,泛型仅保留一个占位符
    而用特定类型实例化泛型代码,编译时会将泛型替换为实例化的特定类型.

    轻量级的结构中使用泛型
    public struct Point<T>
    {
      public T X;
      public T Y;
    }

    Point<int> point;
    point.X=1;
    point.Y=2;

    Point<double> point;
    point.X=1.2;
    point.Y=3.4;

    default关键字
    假设不希望在堆栈为空时引发异常,而是希望返回堆栈中存储的类型的默认值
    --值类型返回0(整型、枚举和结构)
    --引用类型返回null
    如果是基于object,则可以简单的返回null

    return default(T);

    单个类型可以定义多个泛型

    class Node<K,T>
    {
      public K Key;
      public T Item;
      public Node<K,T> NextNode;
      public Node()
      {
        Key = default(K);
        Item = defualt(T);
        NextNode = null;
      }
      public Node(K key,T item,Node<K,T> nextNode)
      {
        Key = key;
        Item = item;
        NextNode = nextNode;
      }
    }

    public class LinkedList<K,T>
    {
      Node<K,T> m_Head;
      public LinkedList()
      {
        m_Head = new Node<K,T>();
      }
      public void AddHead(K key,T item)
      {
        Node<K,T> newNode = new Node<K,T>(key,item,m_Head.NextNode);
        m_Head.NextNode = newNode;
      }
    }


    泛型别名
    在文件头部使用using为特定类型取别名
    别名作用范围是整个文件

    using List = LinkedList<int,string>;
    class ListClient
    {
      static void Main(string[] args)
      {
        List list = new List();
        list.AddHead(123,"AAA");
      }
    }

    更多参考MSDN:http://msdn.microsoft.com/zh-cn/library/ms379564(VS.80).aspx#


posted @ 2009-03-27 17:51  Rain520  阅读(314)  评论(0编辑  收藏  举报