私は今日までこの問題に遭遇したことがなく、この種の行動を達成するための慣習/ベストプラクティスは何であるか疑問に思っていました。
基本的なセットアップは次のとおりです。
public interface IDispatch {
void Dispatch();
}
public class Foo : IDispatch {
void IDispatch.Dispatch() {
DoSomething();
}
}
public class Bar : Foo {
...
}
BarはFooをサブクラス化する必要があります。これは、Barと同じプロパティをすべて共有し、さらに2つの新しいプロパティを導入するためです。私が抱えている問題は、FooにもDispatch()のわずかに異なる実装が必要なことです。通常はオーバーライドされますが、これはインターフェイスメソッドには無効なので、BarにIDispatchを実装させるだけでも問題ないので、クラス定義は次のようになります。
public class Bar : Foo, IDispatch { .... }
次に、Barでもそのインターフェイスメソッドを明示的に実装しますか?私のコンパイラは、この方法でそれを行おうとすると文句を言わないようですが、それが将来どの実装を使用するかを解決するランタイムの問題を引き起こすかどうか、またはこのようなことを達成するためのより良い方法があるかどうかはわかりませんでした。
また、私の職場では、UMLモデルからのコード生成を使用しているため、すべてのクラス設計を最初にモデルから実行する必要があります。コード生成ツールは、インターフェイスメソッドを明示的に実装する原因になります(これの長所と短所については、今私が対処しなければならないことなので、暗黙的な実装はオプションではありません)