Iterator迭代器原理
?
引入
?
foreach (var item in hand)
{遍歷
???item.Fly();
}
?
常見面試題:可以foreach的條件
對象具有迭代器對象(GetEnumerator方法)
或,對象實現IEnumerable接口
?
?
迭代器原理與意圖
?
原理:iterator 迭代器對象
意圖:訪問聚合對象內容而不暴露其內部結構。
????? 提供簡單明了的獲取集合類型對象的方式。
?
?
?
?
?
?
?
?
?
?
?
?
迭代器實現
?
調用實現
?
IEnumerator iterator=hand.GetEnumerator();//創建迭代器對象
?
//理解為:索引增加? 如果返回true表示有元素
while(iterator.MoveNext())// -1??? //2.移動到下一個元素
{ //理解為:獲取當前索引的元素
IThrowablet = iterator.Current as IThrowable;獲取當前元素
t.Fly();
}
?
?
迭代器01
?
1.創建迭代器對象
public IEnumerator GetEnumerator()
{//創建迭代器對象
return new HandEnumerator() {Target = AllObject };
}
?
?
?
?
?
2.自定義迭代器對象
??? //自定義迭代器對象:負責提供一種順序訪問集合類型對象元素的方法。
??? public class HandEnumerator:IEnumerator
??? {?? public IThrowable[] Target{ get; set; }
??????? private int index = -1;
??????? public object Current
??????? { get???????????? {
?????????????? return Target[index];??????????? }??????? }
??????? public bool MoveNext()
??????? {
??????????? //索引增加
??????????? index++;
??????????? //true 沒有越界?????? false 越界
??????????? return index <=Target.Length - 1;
??????? }
??????? public void Reset()
??????? {???index = -1;??????? }
??? }
?
?
?
?
?
?
?
?
迭代器02
1.利用yeld return 來實現
public IEnumerator GetEnumerator()
{
//1.第一次調用MoveNext方法開始執行方法體
//2.執行到yieldreturn處,暫時退出
//3.再次調用MoveNext方法,從yield return處繼續執行。
//循環到2步……
//yieldreturn 將自動創建迭代器對象
for (int i = 0; i <AllObject.Length; i++)
??????????? {
??????????????? yield return AllObject[i];//暫時退出
??????????? }
??????? }
?
?
?
?
總結
以上是生活随笔為你收集整理的Iterator迭代器原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重要核心思想
- 下一篇: Unity自定义事件相应区域