gpt4 book ai didi

c# - 为什么我必须定义 IEnumerator.Current & IEnumerator.Current,这有什么作用?

转载 作者:太空狗 更新时间:2023-10-29 21:26:47 29 4
gpt4 key购买 nike

当我在训练期间编写的类上实现 IEnumerable 和 IEnumerator 时,我注意到我需要为属性“Current”指定两个实现。

public class PeopleEnumerator : IEnumerator<Person>
{
People people; // my collection I'm enumerating (just a wrapped array).
int index; // my index to keep track of where in the collection I am.

...

//implementation for Person
public Person Current { get { return people[index]; } }

//implementation for object
object Enumerator.Current { get { return people[index]; } }
}

我大致了解我正在实现一些非通用版本的 IEnumerator 和它的“当前”属性,但是我不明白以下内容:

  • 为什么允许我在这里按返回类型重载?大概它与明确的 IEnumerator.Current; 有关。然而,原因对我来说是不透明的。
  • 为什么不能将“object IEnumerator.Current”指定为“public”?

提前致谢!

最佳答案

您必须实现两个不同接口(interface)的原因只有一个:向后兼容性。 C# 1.0 没有泛型。
在 C# 2.0 中,我们得到了 IEnumerator<T>它扩展了 1.0 IEnumerator .

  • Why am I allowed to overload by return type here? Presumably it has something to do with the explicit IEnumerator.Current; however the reasons are opaque to me.

不能仅按返回类型重载方法或属性;这就是为什么其中之一必须是显式实现的原因。

  • Why can "object IEnumerator.Current" not be specified as "public"?

同理。它必须是一个明确的实现。显式实现通常不能具有可见性修饰符。它不可能有任何其他可见性。 IEnumerator.Current只能通过 IEnumerator 的实例调用界面。

关于c# - 为什么我必须定义 IEnumerator<T>.Current & IEnumerator.Current,这有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37124263/

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