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