C#中foreach的實現原理 在探討foreach如何內部如何實現這個問題之前,我們需要理解兩個C#裡邊的介面,IEnumerable 與 IEnumerator. 在C#裡邊的遍歷集合時用到的相關類中,IEnumerable是最基本的介面。這是一個可以進行泛型化的介面,比如說IEnumerabl ...
C#中foreach的實現原理
在探討foreach如何內部如何實現這個問題之前,我們需要理解兩個C#裡邊的介面,IEnumerable 與 IEnumerator. 在C#裡邊的遍歷集合時用到的相關類中,IEnumerable是最基本的介面。這是一個可以進行泛型化的介面,比如說IEnumerable<User>.在微軟的.NET推出了這兩個介面後,才有了foreach的用法,可以說,foreach是建立在這兩個介面的基礎之上的,foreach的前提是其裡邊的容器要實現了IEnumerable介面。
IEnumerable 這個介面裡邊定義的內容非常簡單,最重要的就是裡邊有一個抽象方法GetEnumerator. IEnumerable的意思是這個集合是可以遍歷的,而這個GetEnumerator方法返回的IEnumerator的就是一個遍歷器,用這個工具來遍歷這個類。如果說IEnumerable 是一瓶香檳,那麼IEnumerator就是一個開瓶器。在實現這個IEnumerable介面的時候,必須要實現這個GetEnumerator方法,要返回一個實例化的IEnumorator.
下麵來介紹一下這個IEnumorator介面。這個介面中定義的內容也很簡單,包括Current,就是返回這個遍歷工具所指向的那個容器的當前的元素,MoveNext 方法就是指向下一個元素,當遍歷到最後沒有元素時,返回一個false.當我們實現一個IEnumerable類的時候,我們的目的就應該是遍歷這個集合,所以同時我們要實現IEnumerator這個工具類,定義我們自己的邏輯來告訴CLR我們怎麼去遍歷這個集合。