如何实现需要重复成员名称的接口?

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()方法都是显式实现的,编译将拒绝它们具有相同的名称.为什么?

Bry*_*tts 6

您可以使用显式接口实现:

IEnumerator IEnumerable.GetEnumerator()
{
    return GetEnumerator();
}

public IEnumerator<T> GetEnumerator()
{
    ...
}
Run Code Online (Sandbox Code Playgroud)