gpt4 book ai didi

c# - 两种 GetEnumerator 方法?

转载 作者:行者123 更新时间:2023-11-30 19:23:12 29 4
gpt4 key购买 nike

我真的不明白为什么在这个例子中,这个类定义了两个GetEnumerator方法:一个显式实现接口(interface),另一个隐式 如我所知。那为什么?

class FormattedAddresses : IEnumerable<string>
{
private List<string> internalList = new List<string>();

public IEnumerator<string> GetEnumerator()
{
return internalList.GetEnumerator();
}

System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return internalList.GetEnumerator();
}

public void Add(string firstname, string lastname,
string street, string city,
string state, string zipcode)
{
internalList.Add($@"{firstname} {lastname} {street} {city}, {state} {zipcode}");
}
}

最佳答案

why [...] this class defines two GetEnumerator methods:

好吧,一个是通用的,另一个不是。
非泛型版本是 .NET v1 的遗物,在泛型之前。

你有 class FormattedAddresses : IEnumerable<string>但是IEnumerable<T>源自旧界面 IEnumerable .

所以它实际上是 class FormattedAddresses : IEnumerable<string>, IEnumerable并且您的类(class)必须同时实现两者。这两种方法的返回类型不同,因此重载或覆盖不适用。

请注意,遗留版本是“显式”实现的,尽可能隐藏它,不实现它通常是可以接受的:

System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
throw new NotImplemented();
}

只有在完全成熟的库类(而不是应用程序类)中,您才会费心让它实际工作。

关于c# - 两种 GetEnumerator 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54409072/

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