종종 내 코드에 IEnumerable<T>
같은 일부 인터페이스를 구현해야합니다. 우리는 그들이 같은 행동을 할 것을 이해하더라도, 나는 두 GetEnumerator() 방법을 구현해야하지만중복 멤버 이름이 필요한 인터페이스를 구현하는 방법?
public IEnumerator<T> GetEnumerator() {
// Code here...
}
public IEnumerator GetEnumerator1() {
// Code here...
}
, 그들은 극단적으로 같은 이름을 가질 수 있습니다 자동으로 구현할 때
때마다, 나는 다음과 같은 발생 어쩐지. 컴파일러는 반환 유형 만 다르므로이를 다른 클래스의 오버로드로 처리 할 수 없습니다.
이렇게하면 GetEnumerator1()
접근자를 private
으로 설정할 수 있습니다. 이 방법으로, 컴파일러는 인터페이스 멤버를 구현하지 않는 것에 대해 불평하지 않고 단순히 메서드 본문에 NotImplementedException
을 던집니다.
그러나 나는 그것이 좋은 연습인지 또는 내가 다르게 진행할 것인지, 아마도 방법 별칭 또는 그와 비슷한 것으로 생각합니다.
동일한 이름의 두 가지 메소드를 구현해야하는
IEnumerable<T>
과 같은 인터페이스를 구현하는 동안 가장 좋은 방법은 무엇입니까?
EDIT # 1
는 VB.NET에 명시 적으로 이와
GetEnumerator1()
강제로 구현되기 때문에, 인터페이스를 구현하면서 VB.NET는 C#에 다르게 반응한다.
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
두 GetEnumerator()
방법이 명시 적으로 구현하고, 컴파일은 같은 이름을 가진 그들을 거부합니다 : 여기에 코드입니다. 왜?
컴파일되지 않습니다. – SLaks
글쎄, 내가 말하고자하는 것을 진술하는 예가되기 때문에 여기에는별로 중요하지 않습니다. 내 질문을 참조하십시오. =) –
당신의 VB 메소드 선언이 * 다른 * 인터페이스 (generic과 generic IEnumerator 버전이 아닌)를 명시 적으로 구현합니다 : 컴파일러가 그것들을 허용하지 않는다고 말하는 것입니까? –