假设以下课程:
public class MyEnum: IEnumerator
{
private List<SomeObject> _myList = new List<SomeObject>();
...
}
Run Code Online (Sandbox Code Playgroud)
有必要在MyEnum中实现IEnumerator方法.但是,是否可以将IEnumerator的实现直接"委托"或重定向到_myList而无需实现IEnumerator方法?
方法1: 继续使用封装并将调用转发到List实现.
class SomeObject
{
}
class MyEnum : IEnumerable<SomeObject>
{
private List<SomeObject> _myList = new List<SomeObject>();
public void Add(SomeObject o)
{
_myList.Add(o);
}
public IEnumerator<SomeObject> 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();
}
}
Run Code Online (Sandbox Code Playgroud)
方法2: 从List实现继承,您可以免费获得该行为.
class SomeObject
{
}
class MyEnum : List<SomeObject>
{
}
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();
}
}
Run Code Online (Sandbox Code Playgroud)
方法1允许更好的沙盒,因为在没有MyEnum知识的情况下没有将在List中调用的方法.最少努力方法2是优选的.
归档时间: |
|
查看次数: |
4711 次 |
最近记录: |