C 中的ICollection介面

2021-06-25 21:56:53 字數 2650 閱讀 8710

一、集合類:

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介面

icollection介面定義了泛型集合介面,所謂泛型集合,即使用了.net framework提供的泛型特性,使集合限定為只儲存一種特定型別物件引用或值型別的資料的集合。泛型集合增強了集合訪問的效率和安全性。

由於儲存型別已被確定,所以icollection比icollection介面提供了更多的方法,包括新增到集合,從集合刪除以及判斷乙個物件引用(或物件值)是否在集合中存在。

3.2 ienumerable介面

icollection介面實現了ienumerable介面,主要用來返回乙個實現了實現了ienumerator介面的,確定型別的迭代子物件

參考icollection的繼承關係圖。

圖4 icollection介面繼承關係圖

熟悉上述的系列介面,這是我們後面學習各種集合類物件的基礎。

C 中的ICollection介面

一 集合類 1.1 icollection介面 前面我們學習了陣列,這是.net framework定義的最基本的集合型別,除過陣列外,net framework還另外定義了很多集合型別以滿足程式設計的需要。常見的集合有 所有的這些集合型別,在.net framework中都必須實現乙個重要的介面 ...

歡迎學習C 中ICollection介面的使用方法

希望您有所收穫 an highlighted block using system using system.collections using system.collections.generic using system.linq using system.text namespace stud...

IT界中的《學習的革命》

這兩天,博文中充滿了一種激動,這種激動是 大全2 所帶來的。由我們 電子工業出版社博文視點資訊 編輯出版的 大全2 創造了書業界的另乙個 學習的革命 在短短的四天內,零售價98.00元整的 大全2 的銷售直逼一萬冊,我們已經開始緊張的重印工作了。因為,網上書店和實體書店要求發貨的通知太多了。雖然這本...