gpt4 book ai didi

c# - C#中如何将接口(interface)实现委托(delegate)给其他类

转载 作者:太空狗 更新时间:2023-10-29 19:40:17 24 4
gpt4 key购买 nike

假设有以下类:

public class MyEnum: IEnumerator
{
private List<SomeObject> _myList = new List<SomeObject>();
...
}

有必要在 MyEnum 中实现 IEnumerator 方法。但是是否可以将 IEnumerator 的实现直接“委托(delegate)”或重定向到 _myList 而无需实现 IEnumerator 方法?

最佳答案

方法一:继续使用封装并将调用转发到 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();
}
}

方法二:从 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();
}
}

方法 1 允许更好的沙盒,因为没有 MyEnum 知识的情况下不会在 List 中调用任何方法。为省力,首选方法 2

关于c# - C#中如何将接口(interface)实现委托(delegate)给其他类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/126164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com