Как вызвать явно реализованный интерфейс-метод в базовом классе

У меня есть ситуация, когда два класса (один производный от другого) оба реализуют один и тот же интерфейс явно:

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; }
}

Я также могу изменить его, чтобы реализовать интерфейс неявно. Но мне просто интересно, возможно ли это без этих обходных путей.

29
задан MarqueIV 16 May 2018 в 14:40
поделиться