interface Iterator { object First(); object Next(); bool isDone(); object CurrentItem(); } class myIterator : Iterator { private MyAggragate items; private int cuttent = 0; public myIterator(MyAggragate _items) { items = _items; } public object CurrentItem() { return items[cuttent]; } public object First() { return items[0]; } public bool isDone() { return cuttent>=items.Count?true:false; } public object Next() { cuttent++; if (cuttent >= items.Count) return null; return items[cuttent]; } } abstract class Aggragate { public abstract Iterator CreateIterator(); } class MyAggragate : Aggragate { private IList<string> list = new List<string>(); public int Count { get { return list.Count; } } public string this[int index] { get { return list[index]; } set { list.Insert(index, value); } } public override Iterator CreateIterator() { return new myIterator(this); } } //前端 static void Main(string[] args) { MyAggragate a = new MyAggragate(); a[0] = "张三"; a[1] = "李四"; a[2] = "王五"; a[3] = "王五2"; diedaiqi.Iterator i = new myIterator(a); var item = i.First(); Console.WriteLine("{0}1", item); while (!i.isDone()) { Console.WriteLine("{0}",i.CurrentItem()); i.Next(); } Console.ReadLine(); }

总结:访问聚集对象,不管该对象是什么,需要遍历的时候,就使用迭代器。
迭代器模式:为聚集提供开始、下一个、是否结束、当前处于哪一项的统一的接口。
C#的集合什么的已经在内部实现了迭代器。
foreach(string item in a)
{
console.write("当前{0}",item);
}的内部实现其实是:
IEnumerator<string> e=a.GetEnumerator();
while(e.Next())
{
console.write("当前{0}",e.Current);
}