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