程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#泛型學習筆記

C#泛型學習筆記

編輯:C#入門知識

泛型概述
  使用泛型類型可以最大限度地重用代碼、保護類型的安全以及提高性能。

  泛型最常見的用途是創建集合類。

  .NET Framework 類庫在 System.Collections.Generic 命名空間中包含幾個新的泛型集合類。應盡可能地使用這些類來    代替普通的類,如 System.Collections 命名空間中的 ArrayList。

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

  可以對泛型類進行約束以訪問特定數據類型的方法。

  關於泛型數據類型中使用的類型的信息可在運行時通過使用反射獲取。

  優點
  泛型類和泛型方法同時具備可重用性、類型安全和效率,這是非泛型類和非泛型方法無法具備的。泛型通常用與集合以及作用於集合的方法一起使用。.NET Framework 2.0 版類庫提供一個新的命名空間 System.Collections.Generic,其中包含幾個新的基於泛型的集合類。建議面向 .NET Framework 2.0 及更高版本的所有應用程序都使用新的泛型集合類,而不要使用舊的非泛型集合類如 ArrayList。
  何時使用泛型集合

  通常情況下,建議您使用泛型集合,因為這樣可以獲得類型安全的直接優點而不需要從基集合類型派生並實現類型特定的成員。此外,如果集合元素為值類型,泛型集合類型的性能通常優於對應的非泛型集合類型(並優於從非泛型基集合類型派生的類型),因為使用泛型時不必對元素進行裝箱。

  下面的泛型類型對應於現有的集合類型:

  List<(Of <(T>)>) 是對應於 ArrayList 的泛型類。

  Dictionary<(Of <(TKey, TValue>)>) 是對應於 Hashtable 的泛型類。

  Collection<(Of <(T>)>) 是對應於 CollectionBase 的泛型類。Collection<(Of <(T>)>) 可以用作基類,但與 CollectionBase 不同的是它不是抽象的。這樣使用起來要方便得多。

  ReadOnlyCollection<(Of <(T>)>) 是對應於 ReadOnlyCollectionBase 的泛型類。ReadOnlyCollection<(Of <(T>)>) 不是抽象的,它具有一個構造函數,該構造函數使其易於將現有的 List<(Of <(T>)>) 公開為只讀集合。

  Queue<(Of <(T>)>)、Stack<(Of <(T>)>) 和 SortedList<(Of <(TKey, TValue>)>) 泛型類分別對應於與其同名的非泛型類。

   其他類型
  有幾種泛型集合類型沒有對應的非泛型類型:

  LinkedList<(Of <(T>)>) 是一個通用鏈接列表,它提供運算復雜度為 O(1) 的插入和移除操作。

  SortedDictionary<(Of <(TKey, TValue>)>) 是一個排序的字典,其插入和檢索操作的運算復雜度為 O(log n),這使得它成為 SortedList<(Of <(TKey, TValue>)>) 的十分有用的替代類型。

  KeyedCollection<(Of <(TKey, TItem>)>) 是介於列表和字典之間的混合類型,它提供了一種存儲包含自己鍵的對象的方法。

  LINQ to Objects
  LINQ to Objects 功能允許使用 LINQ 查詢訪問內存中的對象,但條件是該對象類型要實現 IEnumerable 或 IEnumerable<(Of <(T>)>)。LINQ 查詢提供了一種通用的數據訪問模式;與標准 foreach 循環相比,它通常更加簡潔,可讀性更高;這種查詢可提供篩選、排序和分組功能。LINQ 查詢還可提高性能。有關更多信息,請參見 LINQ to Objects。

  其他功能
  一些泛型類型具有非泛型集合類型中沒有的功能。例如,List<(Of <(T>)>) 類(對應於非泛型 ArrayList 類)具有許多接受泛型委托(如允許指定搜索列表的方法的 Predicate<(Of <(T>)>) 委托、表示操作每個列表元素的 Action<(Of <(T>)>) 委托和允許定義類型之間轉換的 Converter<(Of <(TInput, TOutput>)>) 委托)的方法。

  List<(Of <(T>)>) 類允許指定您自己的用於排序和搜索列表的 IComparer<(Of <(T>)>) 泛型接口實現。SortedDictionary<(Of <(TKey, TValue>)>) 和 SortedList<(Of <(TKey, TValue>)>) 類也具有此功能,此外還允許在創建集合時指定比較器。類似地,Dictionary<(Of <(TKey, TValue>)>) 和 KeyedCollection<(Of <(TKey, TItem>)>) 類允許您指定自己的相等比較器。
 

  參考資料:CLR 中的泛型簡介 http://msdn.microsoft.com/zh-cn/library/aa686046.aspx

    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved