C # вызов метода интерфейса в классе - PullRequest
3 голосов
/ 10 мая 2010
interface ILol
{
   void LOL();
}

class Rofl : ILol
{
   void ILol.LOL()
   {
      GlobalLOLHandler.RaiseROFLCOPTER(this);
   }
   public Rofl()
   {
      //Is there shorter way of writing this or i is there "other" problem with implementation??
      (this as ILol).LOL();
   }
}

Ответы [ 5 ]

10 голосов
/ 11 мая 2010

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

class Rofl : ILol
{
    public void LOL() { ... }

    public Rofl()
    {
        LOL();
    }
}

(Обратите внимание, что ваша реализация также должна быть общедоступной.)

9 голосов
/ 11 мая 2010

Возможно, вы захотите изменить приведение с (this as ILol) на ((ILol)this). В as as разрешено возвращать значение null, что может привести к ошибкам в будущем и проверять компилятор.

5 голосов
/ 11 мая 2010

Не используйте as, просто приведите:

((ILol)this).LOL();
0 голосов
/ 11 мая 2010

Вам не нужно вообще разыгрывать. Поскольку ROFL реализует ILOL, вы можете просто позвонить this.LOL() или даже просто LOL();

0 голосов
/ 11 мая 2010

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

void LOL()
{
    GlobalLOLHandler.RaiseROFLCOPTER(this);
}
public Rofl()
{
    LOL();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...