假设以下课程:
public class MyEnum: IEnumerator { private List_myList = new List (); ... }
有必要在MyEnum中实现IEnumerator方法.但是,是否可以将IEnumerator的实现直接"委托"或重定向到_myList而无需实现IEnumerator方法?
方法1: 继续使用封装并将调用转发到List实现.
class SomeObject { } class MyEnum : IEnumerable{ private List _myList = new List (); public void Add(SomeObject o) { _myList.Add(o); } public IEnumerator GetEnumerator() { return _myList.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return this.GetEnumerator(); } } class Program { static void Main(string[] args) { MyEnum a = new MyEnum(); a.Add(new SomeObject()); foreach (SomeObject o in a) { Console.WriteLine(o.GetType().ToString()); } Console.ReadLine(); } }
方法2: 从List实现继承,您可以免费获得该行为.
class SomeObject { } class MyEnum : List{ } class Program { static void Main(string[] args) { MyEnum a = new MyEnum(); a.Add(new SomeObject()); foreach (SomeObject o in a) { Console.WriteLine(o.GetType().ToString()); } Console.ReadLine(); } }
方法1允许更好的沙盒,因为在没有MyEnum知识的情况下没有将在List中调用的方法.最少努力方法2是优选的.