泛型類的迭代器設(shè)計

一個泛型類作為Collection,可枚舉性(IEnumerable)是很重要的。正如C++的標準庫里的集合要有對應的迭代器(Iterator),這樣才能方便地foreach()等等。

泛型里的IEnumerable和IEnumerator:

1. 一個Collection要支持foreach方式的遍歷,必須實現(xiàn)IEnumerable接口(亦即,必須以某種方式返回IEnumerator對象)。

2. IEnumerator對象具體實現(xiàn)了iterator(通過MoveNext(),Reset(),Current)。

3. 從這兩個接口的用詞選擇上,也可以看出其不同:IEnumerable是一個聲明式的接口,聲明實現(xiàn)該接口的class是“可枚舉(enumerable)”的,但并沒有說明如何實現(xiàn)枚舉器(iterator);IEnumerator是一個實現(xiàn)式的接口,IEnumerator對象就是一個iterator(迭代器)。

4. IEnumerable和IEnumerator通過IEnumerable的GetEnumerator()方法建立了連接,可以通過IEnumerable的GetEnumerator()得到IEnumerator對象。(當前狀態(tài),遍歷,尾遞歸)

5. 由于IEnumerable擴展(繼承)了舊的IEnumerable接口,所以要實現(xiàn)兩個不同的方法:

IEnumerator GetEnumerator();

IEnumerator GetEnumerator(); // 由于和泛型版本的方法同名,所以該方法的實現(xiàn)需要使用顯式接口實現(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容