我正在编写一个实现ICollection<T>
的简单集合类。一切基本上都有效,除非我添加一个IEnumerator<T> GetEnumerator()
方法,它抱怨我没有IEnumerator GetEnumerator()
方法。反之亦然。我不允许同时使用两者,因为它们只有返回类型不同,所以我真的很困惑编译器对我的要求。
这些错误正如我们给出的那样:
错误CS0738:
MyClass<T>' does not implement interface member
System.Collections.Generic.IEnumerable.GetEnumerator()'和最佳实现候选者MyClass<T>.GetEnumerator()' return type
System.Collections.IEnumerator'与接口成员返回类型`System.Collections不匹配.Generic.IEnumerator'
或者,我可以:
错误CS0738:
MyClass<T>' does not implement interface member
System.Collections.IEnumerable.GetEnumerator()'和最佳实现候选者MyClass<T>.GetEnumerator()' return type
System.Collections.Generic.IEnumerator'与接口成员返回类型`System.Collections不匹配.IEnumerator'
答案 0 :(得分:6)
明确地实施它们:
IEnumerator IEnumerable.GetEnumerator() {
}
IEnumerator<T> IEnumerable<T>.GetEnumerator() {
}
// etc.
显式接口实现是如何实现的。在MSDN上阅读:http://msdn.microsoft.com/en-us/library/aa288461(v=vs.71).aspx
答案 1 :(得分:3)
使用explicit interface implementation。这正是List<T>
实现IEnumerable
和IEnumerable<T>
的方式,指向第三个GetEnumerator
方法:
IEnumerator IEnumerable.GetEnumerator()
{
return new List<T>.Enumerator(this);
}
IEnumerator<T> IEnumerable<T>.GetEnumerator()
{
return new List<T>.Enumerator(this);
}
public List<T>.Enumerator GetEnumerator()
{
return new List<T>.Enumerator(this);
}
使用这种声明,你可以使用相同名称的几个方法 - 只要它们实现了一些接口方法。
答案 2 :(得分:-3)
ICollection扩展了IEnumerable。因此,您不希望在您的类上执行IEnumerable