Wil*_*ler 1 ienumerable ienumerator implementation interface .net-2.0
我经常需要实现一些接口,例如IEnumerable<T>在我的代码中.
每次,当自动实现时,我会遇到以下情况:
public IEnumerator<T> GetEnumerator() {
// Code here...
}
public IEnumerator GetEnumerator1() {
// Code here...
}
Run Code Online (Sandbox Code Playgroud)
虽然我必须实现两个GetEnumerator()方法,但它们不可能具有相同的名称,即使我们知道它们以某种方式执行相同操作.编译器不能将它们视为另一个的重载,因为只有返回类型不同.
这样做时,我设法将GetEnumerator1()访问者设置为private.这样,编译器就不会抱怨没有实现接口成员,而只是NotImplementedException在方法体内抛出一个.
但是,我想知道这是一个好的做法,还是我将以不同的方式进行,也许是方法别名或类似的东西.
实现接口时最好的方法是什么,例如
IEnumerable<T>需要实现两个具有相同名称的不同方法?
编辑#1
VB.NET在实现接口时的反应是否与C#不同,因为在VB.NET中它是明确实现的,因此强制执行
GetEnumerator1().这是代码:
Public Function GetEnumerator() As System.Collections.Generic.IEnumerator(Of T) Implements System.Collections.Generic.IEnumerable(Of T).GetEnumerator
// Code here...
End Function
Public Function GetEnumerator1() As System.Collections.Generic.IEnumerator Implements System.Collections.Generic.IEnumerable.GetEnumerator
// Code here...
End Function
Run Code Online (Sandbox Code Playgroud)
两种GetEnumerator()方法都是显式实现的,编译将拒绝它们具有相同的名称.为什么?
您可以使用显式接口实现:
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public IEnumerator<T> GetEnumerator()
{
...
}
Run Code Online (Sandbox Code Playgroud)