|
分類:[C# (Windows)]
またお世話になります。 IEnumerableをLinearListクラスで実装しているにもかかわらず、 IEnumerableにあるMoveNext、Resetの両メソッドを定義していない のに動作する理由が分かりません。 基本過ぎて申し訳ありませんが教えていただけないでしょうか。 お願い致します。
using System; using System.Collections;
/// <summary> /// 片方向連結リストクラス /// </summary> class LinearList : IEnumerable { /// <summary> /// 連結リストのセル /// </summary> private class Cell { public object value; public Cell next;
public Cell(object value, Cell next) { this.value = value; this.next = next; } }
/// <summary> /// LinearList の列挙子 /// </summary> private class LinearListEnumerator : IEnumerator { private LinearList list; private Cell current;
public LinearListEnumerator(LinearList list) { this.list = list; this.current = null; }
/// <summary> /// コレクション内の現在の要素を取得 /// </summary> public object Current { get{return this.current.value;} }
/// <summary> /// 列挙子をコレクションの次の要素に進める /// </summary> public bool MoveNext() { if(this.current == null) this.current = this.list.head; else this.current = this.current.next;
if(this.current == null) return false; return true; }
/// <summary> /// 列挙子を初期位置に戻す /// </summary> public void Reset() { this.current = null; } }
private Cell head;
public LinearList() { head = null; }
/// <summary> /// リストに新しい要素を追加 /// </summary> public void Add(object value) { head = new Cell(value, head); }
/// <summary> /// 列挙子を取得 /// </summary> public IEnumerator GetEnumerator() { return new LinearListEnumerator(this); } }
class ForeachSample { static void Main() { LinearList list = new LinearList();
for(int i=0; i<10; ++i) { list.Add(i * (i + 1) / 2); }
foreach(int s in list) { Console.Write(s + " "); } } }
|