2012-04-24 9 views
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"); 
    } 
} 

私はイベントに登録して、クラスBCのOnMyEvent()メソッドをオーバーライドします。メソッドbase.OnMyEvent(e)を呼び出す給与は、方法C.OnMyEvent(...)の冒頭にあります。メソッドをオーバーライドしてイベントを購読するのは同じですか?

ここまでのところ、違いはありません。言い換えれば、オーバーライドメソッドの冒頭でbase.OnMyEvent(e)と呼び出すと、イベントに登録するだけで同じ意味になりますか?

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

答えて

1

違いがあります:C.OnMyEvent()を起動

  • MyEventを発生させます。 (逆に、MyEventを上げるとC.OnMyEvent()を起動しません。)
  • B.MyMethodMyEventを処理します。したがって、MyEventを呼び出すと、B.MyMethodが呼び出されます。 (逆に、B.MyMethodを起動すると、MyEventは発生しません。)つまり
+0

:私はイベントを処理したい場合は、 'A.MyEvent'は、クラスでそれを扱う 'B'のとでは違いがありますクラス 'C'? – Alexandre

+0

今書いているとおり、クラス 'B'はイベントを処理していますが、クラス' C'はそうではありません。そう、それは大きな違いです。 – Keith

関連する問題