У меня есть ситуация, когда два класса (один производный от другого) явно реализуют один и тот же интерфейс:
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; }
}
Я также могу изменить его, чтобы реализовать интерфейс неявно. Но мне просто интересно, возможно ли это без каких-либо обходных путей.