类中的C#调用接口方法

时间:2010-05-10 19:58:34

标签: c# class interface call

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 个答案:

答案 0 :(得分:10)

您已经实现了界面explicitly,通常您不需要这样做。相反,只需隐式实现它并像调用任何其他方法一样调用它:

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

    public Rofl()
    {
        LOL();
    }
}

(注意您的实施也需要公开。)

答案 1 :(得分:9)

您可能希望将演员从(this as ILol)更改为((ILol)this)。允许as cast返回null,这可能会导致以后混淆错误以及编译器必须测试的错误。

答案 2 :(得分:5)

不要使用as,只是施放:

((ILol)this).LOL();

答案 3 :(得分:0)

否则,如果您明确实现了该接口。如果通过从实现的方法中删除接口名称来使其隐式,它将按您的意愿工作。

void LOL()
{
    GlobalLOLHandler.RaiseROFLCOPTER(this);
}
public Rofl()
{
    LOL();
}

答案 4 :(得分:-2)

你根本不需要施放。由于ROFL实施ILOL,您只需致电this.LOL()甚至只需LOL();