迭代器(iterator)是一種物件,用來遍歷容器中部分或全部的元素.
拿foreach的內部實現來舉例。foreach可以用來遍歷可列舉型別集合的元素,比如:陣列,list,dictionary等
其實就是用while語句來獲取遍歷集合的 ienumerator介面 來不斷的movenext()(後面會介紹)來實現的.
首先建立個類,繼承兩個介面:ienumerator、ienumerable.
public
class
test
:ienumerator
,ienumerable
public
bool
movenext()
public
void
reset()
}
class
customlist01
:ienumerator
, ienumerable
;}public
object current
}// ienumerable
public
ienumerator
getenumerator()
//ienumerable
public
bool
movenext()
public
void
reset()
}
下面是它的使用:
customlist01 customlist01 =
newcustomlist01()
;ienumerator enumerator = customlist01.
getenumerator()
;if(enumerator.
movenext()
)
執行結果:
因為這裡只進行了一次movenext所以只列印出了這乙個元素,全部列印也很簡單,只需加個while迴圈
while
(enumerator.
movenext()
)
結果:
到這裡,迭代器的標準實現已經完成,其實foreach的底層實現就類似上面寫的while一坨**
可能還會有人想知道泛型的迭代器如何寫,同時迭代器還有簡單協程的寫法,下面就一起帶過吧
class
customlist02
: ienumerable
public
ienumerator
getenumerator()
}}void
main()
}
C 迭代器的實現
using system using system.collections.generic using system.linq using system.text using system.threading.tasks namespace iterator using system using s...
C 高階 繫結器及其底層實現
繫結器繫結器的底層實現 參考文獻 函式物件就是類方法中有operator 運算子過載的。在使用時和函式很類似。在c stl庫中有兩個繫結器 bind1st operator 的第乙個形參變數繫結成乙個確定的值。bind2nd operator 的第二個形參變數繫結成乙個確定的值。大到小排序 在這裡我...
C 迭代器(Foreach)實現方法
一 為非泛型列表建立迭代器塊 using system using system.collections.generic using system.text namespace foreachconstruct region ienumerable 成員 public tokenenumerator...