interface ICollection { int Count { get; } Iterator GetIterator(); }
interface Iterator { bool MoveNext(); object Current { get; } }
class List : ICollection
{
const int MAX = 10;
object[] items = new object[MAX];
public object this[int i] { get => items[i]; set => items[i] = value; }
public int Count => items.Length;
public Iterator GetIterator() => new ListIterator(this);
}
class ListIterator : Iterator
{
int index = 0; ICollection list;
public ListIterator(ICollection list) { this.list = list; }
public bool MoveNext() => ++index <= list.Count;
public object Current => list[index];
}
class Program
{
static void Main()
{
ICollection list = new List();
Iterator it = list.GetIterator();
while (it.MoveNext()) { object current = it.Current; /* 處理 */ }
}
}
此範例展示「介面隔離變化」核心思想:客戶代碼僅依賴 ICollection/Iterator,具體集合可自由替換。C# 2.0 起內建介面取代此手工模式。