0
class A
{
  public event EventHanler MyEvent;
  protected virtual void OnMyEvent(EventArgs e)
  {
    if (MyEvent!=null) 
        MyEvent(this, e);
  }

   public void DoEvent()
   {
    //................
      MyEvent(this, new EventArgs());
   }
}




class B: A
{
  private A a = new A();
  public B ()
  {
    a.MyEvent += MyMethod;
  }
  public void MyMethod(object sender, EventArgs e)
  {
       Console.WriteLine("Event handler");
  }
}



class C : A
{
  private A a = new A();

   protected override void OnMyEvent(EventArgs e)
   {
     base.OnMyEvent(e); 
     Console.WriteLine("OnMyEvent overriding");
  }
}

Bイベントをサブスクライブし、クラスおよびでメソッド OnMyEvent() をオーバーライドしますC。メソッドの呼び出しはメソッドbase.OnMyEvent(e)の先頭にあることに注意してC.OnMyEvent(...)ください。

私に関する限り、ここに違いはありません。つまりbase.OnMyEvent(e)、オーバーライド メソッドの先頭で呼び出すと、イベントをサブスクライブするのと同じ意味になりますか?

実際には違いはありませんか?

4

1 に答える 1

1

違いがあります:

  • 呼び出すとC.OnMyEvent() が発生し MyEventます。(逆に言うと、raisingMyEventは呼び出されませんC.OnMyEvent()。)
  • B.MyMethod ハンドル MyEvent。したがって、レイズMyEventすると が呼び出されB.MyMethodます。(逆に、呼び出しても発生B.MyMethodしませんMyEvent。)
于 2012-04-25T20:37:58.213 に答える