如何在C#中将接口实现委托给其他类

Wil*_*lem 8 c# interface

假设以下课程:

public class MyEnum: IEnumerator
{
    private List<SomeObject> _myList = new List<SomeObject>();
...
}
Run Code Online (Sandbox Code Playgroud)

有必要在MyEnum中实现IEnumerator方法.但是,是否可以将IEnumerator的实现直接"委托"或重定向到_myList而无需实现IEnumerator方法?

Jor*_*ira 7

方法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是优选的.