提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。 class Program { static void Main(string[] args) { MyArray<int> myArray = new MyArray<int>(); myArray.add(1); IEnumerator<int> enums = myArray.GetEnumerator(); while (!enums.checkFinished()) Console.Write(enums.next()); } } public interface IEnumerable<T> { IEnumerator<T> GetEnumerator(); } public interface IEnumerator<T> { T next(); bool checkFinished(); } public class MyArray<T> :IEnumerable<T>{ private List<T> array = new List<T>(); public void add(T val) { array.Add(val); } public List<T> Array { get { return array; } } public IEnumerator<T> GetEnumerator() { return new MyEnumerator<T>(this); } } public class MyEnumerator<T> : IEnumerator<T> { private MyArray<T> _myArray; private int index = 0; public MyEnumerator(MyArray<T> myArray) { _myArray = myArray; } public T next() { return _myArray.Array[index++]; } public bool checkFinished() { return _myArray.Array.Count == index; } }