一、集合類:
1.1 ICollection接口
前面我們學習了數組,這是.net Framework定義的最基本的集合類型,除過數組外,.net Framework還另外定義了很多集合類型以滿足編程的需要。
常見的集合有:
所有的這些集合類型,在.net Framework中都必須實現一個重要的接口:ICollection接口。ICollection接口為實現它的類定義了兩個主要規范:
其中,GetEnumerator方法是由ICollection的父接口IEnumerable接口繼承得來的。
ICollection接口定義了一個存儲和獲取object類型對象引用的集合,所以可以存儲和獲取各種引用類型對象的引用或值類型對象。
1.2IEnumerable接口
IEnumerable接口是ICollection的父接口,凡實現此接口的類,都具備“可迭代”的能力。
IEnumerable接口只定義了一個方法:GetEnumerator,該方法將返回一個“迭代子”對象(或稱為迭代器對象),是一個實現了IEnumerator接口的對象實例。
圖1 ICollection繼承層次
二、迭代子
迭代子在C++中也稱為迭代器,是設計模式中的迭代模式,其存在的意義為:每一種集合都具備不同的存儲形式,例如向量使用數組來存儲,鏈表使用對象和對象間的引用來存儲,表采用多維數組或十字引用來保存數據,樹通過對象和對象間的多個引用來建立關系,圖采用樹或表來保存其關系……可見不同的集合類存儲數據的方式是多樣化的。存儲的多樣性必然導致訪問的多樣性,集合最常用的訪問是“遍歷”,即從集合的頭部訪問到集合的尾部,我們需要想辦法使用一種統一的方式來遍歷訪問不同形式的集合。這就是迭代方式產生的基本原因。
迭代模式將集合類看做一個容量無限的容器,并且容器的存放規則是線性的,即容器里的每一個元素都必須具有一個直接前趨(除過第一個元素)和一個直接后繼(除過最后一個元素)。容器中具備一個標志,可以指向容器中的任意一個存儲單位。
迭代分為兩種:單向只向前迭代和雙向迭代。
2.1 單向只向前迭代模式
對于單向只向前迭代模式,集合的單元標志只能從集合的某個元素起始逐一向后移動,所以最基本的迭代模式定義了三種操作:
圖2 單向只向前迭代
2.2 雙向迭代模式
對于雙向迭代模式,集合的單元標志即從集合的某個元素起逐一向后移動,也可以從集合的某一個元素起逐一向前移動,所以該類型迭代器定義了四種操作:
圖3 雙向迭代
.net Framework使用IEnumerator接口定義了一個單向只向前迭代規范。
ICollection接口繼承了IEnumerable接口,該接口定義的GetEnumerator方法可以獲取到一個當前集合類對象的迭代子對象,即一個實現了IEnumerator接口的對象。
凡是實現了IEnumerable接口的類,都可以使用foreach循環迭代遍歷。
IEnumerator接口定義了一個可以遍歷object類型對象引用的迭代子,IEnumerable接口定義了獲取這種迭代子對象的方法。
三、泛型集合
3.1 ICollection<T>接口
ICollection<T>接口定義了泛型集合接口,所謂泛型集合,即使用了.net Framework提供的泛型特性,使集合限定為只存儲一種特定類型對象引用或值類型的數據的集合。泛型集合增強了集合訪問的效率和安全性。
由于存儲類型已被確定,所以ICollection<T>比ICollection接口提供了更多的方法,包括添加到集合,從集合刪除以及判斷一個對象引用(或對象值)是否在集合中存在。
3.2 IEnumerable<T>接口
ICollection<T>接口實現了IEnumerable<T>接口,主要用來返回一個實現了實現了IEnumerator<T>接口的,確定類型的迭代子對象。
參考ICollection<T>的繼承關系圖。
圖4 ICollection<T>接口繼承關系圖
熟悉上述的系列接口,這是我們后面學習各種集合類對象的基礎。
新聞熱點
疑難解答