C 中foreach的實現原理

2022-07-26 03:30:18 字數 729 閱讀 2152

c#中foreach的實現原理

在**foreach如何內部如何實現這個問題之前,我們需要理解兩個c#裡邊的介面,ienumerable 與 ienumerator. 在c#裡邊的遍歷集合時用到的相關類中,ienumerable是最基本的介面。這是乙個可以進行泛型化的介面,比如說ienumerable.在微軟的.net推出了這兩個介面後,才有了foreach的用法,可以說,foreach是建立在這兩個介面的基礎之上的,foreach的前提是其裡邊的容器要實現了ienumerable介面。

ienumerable 這個介面裡邊定義的內容非常簡單,最重要的就是裡邊有乙個抽象方法getenumerator. ienumerable的意思是這個集合是可以遍歷的,而這個getenumerator方法返回的ienumerator的就是乙個遍歷器,用這個工具來遍歷這個類。如果說ienumerable 是一瓶香檳,那麼ienumerator就是乙個開瓶器。在實現這個ienumerable介面的時候,必須要實現這個getenumerator方法,要返回乙個例項化的ienumorator.

下面來介紹一下這個ienumorator介面。這個介面中定義的內容也很簡單,包括current,就是返回這個遍歷工具所指向的那個容器的當前的元素,movenext 方法就是指向下乙個元素,當遍歷到最後沒有元素時,返回乙個false.當我們實現乙個ienumerable類的時候,我們的目的就應該是遍歷這個集合,所以同時我們要實現ienumerator這個工具類,定義我們自己的邏輯來告訴clr我們怎麼去遍歷這個集合。

C 中foreach的實現原理

在 foreach如何內部如何實現這個問題之前,我們需要理解兩個 c 裡邊的介面,ienumerable與ie numerator.在c 裡邊的遍歷集合時用到的相關類中,ienumerable 是最基本的介面。這是乙個可以進行泛型化的介面,比如說 ienumerable.在微軟的 net 推出了這兩...

C 中foreach的原理

結構篇 foreach 語句為陣列或物件集合中的每個元素重複乙個嵌入語句組。foreach 語句用於迴圈訪問集合以獲取所需資訊,但不應用於更改集合內容以避免產生不可預知的 此語句的形式如下 foreach type identifier in expression statement 其中 type...

GCC中實現c 的 foreach

boost 1.34中提供了foreach,只可惜這個實現也太醜陋了,根本沒有實用價值。其實在gcc中實現foreach是相當簡單的,因為 gcc 提供了typeof 關鍵字。這裡提供乙個實現,與boost不同,用的是 iterator 的概念。用法 vector string vec foreac...