一、集合類:
1.1 ICollection接口
前面我們學習了數組,這是.net Framework定義的最基本的集合類型,除過數組外,.net Framework還另外定義了很多集合類型以滿足編程的需要。
常見的集合有:
所有的這些集合類型,在.net Framework中都必須實現一個重要的接口:ICollection接口。ICollection接口為實現它的類定義了兩個主要規范:
其中,GetEnumerator方法是由ICollection的父接口IEnumerable接口繼承得來的。
ICollection接口定義了一個存儲和獲取object類型對象引用的集合,所以可以存儲和獲取各種引用類型對象的引用或值類型對象。
1.2 IEnumerable接口
IEnumerable接口是ICollection的父接口,凡實現此接口的類,都具備“可迭代”的能力。
IEnumerable接口只定義了一個方法:GetEnumerator,該方法將返回一個“迭代子”對象(或稱為迭代器對象),是一個實現了IEnumerator接口的對象實例。
圖1 ICollection繼承層次
二、迭代子
迭代子在C++中也稱為迭代器,是設計模式中的迭代模式,其存在的意義為:每一種集合都具備不同的存儲形式,例如向量使用數組來存儲,鏈表使用對象和對象間的引用來存儲,表采用多維數組或十字引用來保存數據,樹通過對象和對象間的多個引用來建立關系,圖采用樹或表來保存其關系……可見不同的集合類存儲數據的方式是多樣化的。存儲的多樣性必然導致訪問的多樣性,集合最常用的訪問是“遍歷”,即從集合的頭部訪問到集合的尾部,我們需要想辦法使用一種統一的方式來遍歷訪問不同形式的集合。這就是迭代方式產生的基本原因。
迭代模式將集合類看做一個容量無限的容器,並且容器的存放規則是線性的,即容器裡的每一個元素都必須具有一個直接前趨(除過第一個元素)和一個直接後繼(除過最後一個元素)。容器中具備一個標志,可以指向容器中的任意一個存儲單位。
迭代分為兩種:單向只向前迭代和雙向迭代。
2.1 單向只向前迭代模式
對於單向只向前迭代模式,集合的單元標志只能從集合的某個元素起始逐一向後移動,所以最基本的迭代模式定義了三種操作:
圖2 單向只向前迭代