解釋 .NET 中的迭代器模式
迭代器模式用於迴圈遍歷集合中的元素,並使用 IEnumerator 介面實現。它定義了遍歷(或列舉)集合中的元素的基本底層協議。這是以單向的方式完成的。
以下是 C# 中的 IEnumerator 介面。
public interface IEnumerator{
bool MoveNext();
object Current { get; }
void Reset();
}**MoveNext** 將當前元素或“遊標”推進到下一個位置,如果集合中沒有更多元素,則返回 false。
Current 返回當前位置的元素(通常從 object 轉換為更具體的型別)。在檢索第一個元素之前必須呼叫 **MoveNext**——這是為了允許空集合。
如果實現了 **Reset** 方法,則會返回到開頭,允許再次列舉集合。
集合通常不實現列舉器;而是透過 IEnumerable 介面提供列舉器−
public interface IEnumerable{
IEnumerator GetEnumerator();
}此介面定義了一個返回列舉器的方法。這提供了靈活性,因為迭代邏輯可以傳遞給另一個類。這也意味著多個使用者可以同時列舉集合,而不會相互干擾。您可以將 IEnumerable 視為“IEnumeratorProvider”,它是集合類實現的最基本介面。
以下示例說明了 IEnumerable 和 IEnumerator 的底層用法−
示例
string s = "Hello";
// Because string implements IEnumerable, we can call GetEnumerator():
IEnumerator rator = s.GetEnumerator();
while (rator.MoveNext()){
char c = (char) rator.Current;
Console.Write (c + ".");
}輸出
H.e.l.l.o.
但是,很少以這種方式直接呼叫列舉器上的方法,因為 C# 提供了一個語法快捷方式:foreach 語句。以下是使用 **foreach** 重寫的相同示例−
string s = "Hello"; // The String class implements IEnumerable foreach (char c in s) Console.Write (c + ".");
IEnumerable<T> 和 IEnumerator<T>
IEnumerator 和 IEnumerable 幾乎總是與它們的擴充套件泛型版本一起實現−
public interface IEnumerator<T> : IEnumerator, IDisposable{
T Current { get; }
}
public interface IEnumerable<T> : IEnumerable{
IEnumerator<T> GetEnumerator();
}
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP