У меня есть ситуация, когда два класса (один из другого) реализуют один и тот же интерфейс явно:
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 implementation
Есть ли способ сделать это, без необходимости реализации другого (неинтерпретно-явного) вспомогательного метода?
Обновление
Я знаю, что это возможно с помощью "вспомогательного" метода, который может быть вызван производным классом, например:
class A : I
{
int I.M() { return M2(); }
protected int M2 { return 1; }
}
Я также могу изменить его, чтобы реализовать интерфейс неявно. Но я просто задавался вопросом, возможно ли это без каких-либо этих обходных решений.