我正在编写一个实现ICollection<T>的简单集合类。除了添加一个IEnumerator<T> GetEnumerator()方法之外,一切基本上都正常工作,它抱怨说,我没有IEnumerator GetEnumerator()方法。反之亦然。我不允许两者兼得,因为它们只是在返回类型上不同,所以我真的很困惑编译器想要我做什么。
以下是我所犯的错误:
错误
MyClass<T>' does not implement interface memberSystem.Collections.Generic.IEnumerable.GetEnumerator()‘:MyClass<T>.GetEnumerator()' return typeSystem.Collections.IEnumerator’和最佳实现候选MyClass<T>.GetEnumerator()' return typeSystem.Collections.IEnumerator‘不匹配接口成员返回类型`System.Collections.Generic.IEnumerator’
或者,我也可以:
错误
MyClass<T>' does not implement interface memberSystem.Collections.IEnumerable.GetEnumerator()‘:MyClass<T>.GetEnumerator()' return typeSystem.Collections.Generic.IEnumerator’和最佳实现候选MyClass<T>.GetEnumerator()' return typeSystem.Collections.Generic.IEnumerator‘不匹配接口成员返回类型`System.Collections.IEnumerator’
发布于 2013-10-17 03:35:02
明确执行这些原则:
IEnumerator IEnumerable.GetEnumerator() {
}
IEnumerator<T> IEnumerable<T>.GetEnumerator() {
}
// etc.显式接口实现是如何实现的。在MSDN:http://msdn.microsoft.com/en-us/library/aa288461(v=vs.71).aspx上阅读
发布于 2013-10-17 03:33:35
使用显式接口实现。这正是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);
}有了这种声明,您就可以有两个同名的方法--只要它们实现了一些接口方法。
发布于 2013-10-17 03:33:35
ICollection扩展了IEnumerable。因此,您不想在类上执行IEnumerable
http://msdn.microsoft.com/en-us/library/92t2ye13.aspx
https://stackoverflow.com/questions/19417756
复制相似问题