C 泛型學習筆記

2021-12-29 23:55:36 字數 1467 閱讀 8716

泛型概述

使用泛型型別可以最大限度地重用**、保護型別的安全以及提高效能。

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

.net framework 類庫在 system.collections.generic 命名空間中包含幾個新的泛型集合類。應盡可能地使用這些類來    代替普通的類,如 system.collections 命名空間中的 arraylist。

您可以建立自己的泛型介面、泛型類、泛型方法、泛型事件和泛型委託。

可以對泛型類進行約束以訪問特定資料型別的方法。

關於泛型資料型別中使用的型別的資訊可在執行時通過使用反射獲取。

優點

泛型類和泛型方法同時具備可重用性、型別安全和效率,這是非泛型類和非泛型方法無法具備的。泛型通常用與集合以及作用於集合的方法一起使用。.net framework 2.0 版類庫提供乙個新的命名空間 system.collections.generic,其中包含幾個新的基於泛型的集合類。建議面向 .net framework 2.0 及更高版本的所有應用程式都使用新的泛型集合類,而不要使用舊的非泛型集合類如 arraylist。

何時使用泛型集合

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

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

list)>) 是對應於 arraylist 的泛型類。

dictionary)>) 是對應於 hashtable 的泛型類。

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

readonlycollection)>) 是對應於 readonlycollectionbase 的泛型類。readonlycollection)>) 不是抽象的,它具有乙個建構函式,該建構函式使其易於將現有的 list)>) 公開為唯讀集合。

queue)>)、stack)>) 和 sortedlist)>) 泛型類分別對應於與其同名的非泛型類。

其他型別

有幾種泛型集合型別沒有對應的非泛型型別:

linkedlist)>) 是乙個通用鏈結列表,它提供運算複雜度為 o(1) 的插入和移除操作。

sorteddictionary)>) 是乙個排序的字典,其插入和檢索操作的運算複雜度為 o(log n),這使得它成為 sortedlist)>) 的十分有用的替代型別。

keyedcollection)>) 是介於列表和字典之間的混合型別,它提供了一種儲存包含自己鍵的物件的方法。

linq to objects

C 學習筆記 泛型

泛型將型別引數的概念引入了.net,當我們需要設計類和方法,並將它們的型別制定推遲到客戶端 宣告,並例項化該型別和方法時,可以使用泛型。泛型使之前的想法成為了可能。使用泛型避免了執行時強制轉換或裝箱操作帶來的風險。簡單來說,首先制定乙個特定符號代替實際型別,當建立該型別的例項時,才指定它的實際型別。...

C 學習筆記 泛型演算法

標準庫給容器定義了一些基本的操作,還定義了一組泛型演算法,稱它們為演算法,是因為它們實現了一些經典演算法的公共介面,如排序和搜尋,稱它們是泛型的,是因為它們可以用於不同型別的元素和多種容器型別,甚至包括內建陣列型別。泛型演算法通過迭代器來進行相應的操作,根據操作的不同,可以將泛型演算法分為唯讀演算法...

C 學習筆記(五) 泛型

泛型使型別引數化,從而實現了演算法上的 重用。同時由於去掉了轉換中裝箱和拆箱的操作,使用泛型還可以提高程式的執行速度。我們先看看c 自帶的使用了泛型的類 1 using system.collections.generic 23 namespace study417 18 通過使用泛型,我們可以重複...