コードなどにいくつかのインターフェイスを実装する必要があることがよくありIEnumerable<T>
ます。
毎回、自動的に実装するときに、次のことが発生します。
public IEnumerator<T> GetEnumerator() {
// Code here...
}
public IEnumerator GetEnumerator1() {
// Code here...
}
両方のGetEnumerator()メソッドを実装する必要がありますが、どうにかして同じことを行うことがわかっていても、同じ名前を持つことは不可能です。コンパイラは、戻り値の型のみが異なるため、一方を他方のオーバーロードとして扱うことができません。
そうするとき、GetEnumerator1()
アクセサをに設定することができprivate
ます。このように、コンパイラはインターフェイス メンバーを実装していないことについて文句を言うことはありませんNotImplementedException
。メソッドの本体内で a をスローするだけです。
しかし、それは良い習慣なのか、それとも別の方法で進めるべきなのか、おそらくメソッド エイリアスか何かではないかと思います。
IEnumerable<T>
同じ名前の2つの異なるメソッドの実装を必要とするようなインターフェースを実装する際の最良のアプローチは何ですか?
編集#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
どちらのGetEnumerator()
メソッドも明示的に実装されており、コンパイルはそれらが同じ名前を持つことを拒否します。なんで?