2つのクラス(一方が他方から派生)の両方が同じインターフェイスを明示的に実装する状況があります。
interface I
{
int M();
}
class A : I
{
int I.M() { return 1; }
}
class B : A, I
{
int I.M() { return 2; }
}
の派生クラスの実装からI.M()
、基本クラスの実装を呼び出したいのですが、その方法がわかりません。私がこれまでに試したことはこれです(クラスBで):
int I.M() { return (base as I).M() + 2; }
// this gives a compile-time error
//error CS0175: Use of keyword 'base' is not valid in this context
int I.M() { return ((this as A) as I).M() + 2; }
// this results in an endless loop, since it calls B's implementation
別の(インターフェイスに明示されていない)ヘルパーメソッドを実装せずに、これを行う方法はありますか?
更新:
派生クラスから呼び出すことができる「ヘルパー」メソッドで可能であることを私は知っています。例:
class A : I
{
int I.M() { return M2(); }
protected int M2 { return 1; }
}
また、インターフェイスを非明示的に実装するように変更することもできます。しかし、これらの回避策がなくても可能かどうか疑問に思っていました。