![](/img/trans.png)
[英]Why do I need IEnumerator.Current in a class implementing IEnumerator<T>?
[英]Why must I define IEnumerator<T>.Current & IEnumerator.Current, and what does that achieve?
当我在训练期间编写的类上实现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和一个“当前”属性,但我不明白以下内容:
提前致谢!
您必须实现两个不同的接口只有一个原因:向后兼容性。 C#1.0没有泛型。
在C#2.0中,我们得到了IEnumerator<T>
,它扩展了1.0 IEnumerator
。
- 为什么我允许在这里通过返回类型重载? 据推测它与显式的IEnumerator.Current有关; 但是原因对我来说是不透明的。
您不能仅通过返回类型重载方法或属性; 这就是为什么其中一个必须是一个明确的实现。
- 为什么“对象IEnumerator.Current”不能被指定为“public”?
同样的道理。 它必须是一个明确的实现。 显式实现不能将可见性修饰符作为规则。 它不可能有任何其他可见性。 IEnumerator.Current
只能通过IEnumerator
接口的实例调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.