網頁

搜尋此網誌

2010年6月30日 星期三

Collections and Generics in C Sharp C#的集合和泛型

談談C#程式語言中好用的資料類型:集合(Collections)泛型(Generics),這兩個資料類型簡單來說跟陣列(Array類別System命名空間)功能相同,都是用來表示「一組聚集在一起相同類型的物件資料」,但是集合和泛型提供更多好用的功能,因此撰寫程式時會更加方便,比方說:可以任意擴充大小的資料容量、可以放置不同類型的物件...這些魔法。

集合和泛型的所屬命名空間是:
  • System.Collections
    包含介面和類別,定義各種集合的物件,例如清單、佇列、位元陣列、雜湊表和字典。簡單集合是強型別 (Strongly Typed),不需要轉型(Cast)。
  • System.Collections.Generic
    包含定義了泛型集合的介面和類別,可讓使用者建立強型別 (Strongly Typed) 的泛型集合,以提供比非泛型強型別集合更好的型別安全 (Type Safety) 和效能。
泛型是在C#與.NET Framework 2.0 版和更新版本才有的功能,泛型比集合有更好的效能和安全性,因此建議撰寫程式都使用泛型!主要是因為泛型(Generics)沒有型別的Boxing和Unboxing動作,因此效率與安全性都比較好。

集合(Collections)中常用的類別有:ArrayListQueueStack這幾個類別,而要建立自己的集合類別,則可以使用CollectionBaseDictionaryBase兩個類別繼承擴充。

在System.Collections命名空間中定義幾個常用的介面:
  • ICollection
    定義所有非泛型集合的大小、列舉值和同步方法。
  • IEnumerable
    公開能逐一查看非泛型集合內容一次的列舉值。
  • IList
    表示可以個別由索引存取之物件的非泛型集合。
  • IDictionary
    表示索引鍵/值組的非泛型集合。
CollectionBase繼承介面有ICollection、IEnumerable和IList,而DictionaryBase繼承的介面則有ICollection、IEnumerable和IDictionary,看到差異差異了嗎!由於集合都有繼承IEnumerable介面,因此都可以使用foreach陳述式操作。

泛型(Generics)的功能則是更強更好用!常用的類別有:Dictionary(Of TKey, TValue)LinkedList(Of T)List(Of T)Queue(Of T)Stack(Of T)。在System.Collections.Generic命名空間中也提供很多結構和介面可以使用,如果要自己定義泛型,通常是使用<T>這樣的方式,詳細請參閱泛型 (C# 程式設計手冊),泛型功能很強大,比較複雜所以要花時間仔細閱讀。

對於C++的程式設計人員,C#的泛型相當於C++中的樣板(Template)

沒有留言:

張貼留言

熱門文章