• λ我爱Aspx >> Asp.Net >> C# 泛型简介
  • C# 泛型简介

  • :未知  Դ:internet  :2007-5-20 16:49:07  ؼ:c#
  • 需要注意的是,尽管约束是可选的,但它们在开发一般类型时通常是必不可少的。没有它们,编译器将采取更为保守的类型安全方法,并且只允许在一般类型参数中访问 Object 级别功能。约束是一般类型元数据的一部分,以便客户端编译器也可以利用它们。客户端编译器只允许客户端开发人员使用遵守这些约束的类型,从而实施类型安全。

    以下示例将详细说明约束的需要和用法。假设您要向代码块 3 的链表中添加索引功能或按键搜索功能:

    public class LinkedList { T Find(K key) {...} public T this[K key] { get{return Find(key);} } }

    这使客户端可以编写以下代码:

    LinkedList list = new LinkedList(); list.AddHead(123,"AAA"); list.AddHead(456,"BBB"); string item = list[456]; Debug.Assert(item == "BBB");

    要实现搜索,您需要扫描列表,将每个节点的键与您要查找的键进行比较,并且返回键匹配的节点的项。问题在于,Find() 的以下实现无法编译:

    T Find(K key) { Node current = m_Head; while(current.NextNode != null) { if(current.Key == key) //Will not compile break; else current = current.NextNode; } return current.Item; }

    原因在于,编译器将拒绝编译以下行:

    if(current.Key == key)

    Ҷƪл˵?
  • һƪ在 C# 中通过 P/Invoke 调用Win32 DLL
    һƪ《Effective C#》 翻译札记