2016-04-28 6 views
1

現在、私は同じクラスのeventへのサブスクリプトではなく、OnActivateのような既存のメソッドをオーバーライドするかどうかに苦労しています。クラスのイベントサブスクリプションの代わりにオーバーライドを使用

たとえば、私は、イベントを実装して、次のクラス、持っている:

public class Base 
{ 
    public delegate void DoSomeThing(object sender, EventArgs e); 

    public event DoSomeThing DoSomeThingEventHandler; 

    public virtual void OnDoSomeThing(EventArgs e) 
    { 
     if (DoSomeThingEventHandler != null) 
     { 
      DoSomeThingEventHandler(this, e); 
     } 
    } 
} 

をそして私はDoSomeThingが呼び出された場合、通知されることを望んでいるBaseから派生するクラスを持っています。私はDoSomeThingをオーバーライドする必要がありますか、私はイベントをサブスクライブする必要があります

策1:

public class B1 : Base 
{ 
    public override void OnDoSomeThing(EventArgs e) 
    { 
     // Do some stuff here 

     base.OnDoSomeThing(e); 
    } 
} 

第二の溶液

public class B2 : Base 
{ 
    public B2() 
    { 
     DoSomeThingEventHandler += B2_DoSomeThingEventHandler; 
    } 

    private void B2_DoSomeThingEventHandler(object sender, EventArgs e) 
    { 
     // Do some thing here 
    } 
} 

あなたは、ソリューションB1またはB2を好むだろうか?

ありがとうございました!この場合、最優先で

+0

イベントを無効にする –

答えて

4

は良いオプションですが、最初にあなたが何かを壊さないように、基本クラスの実装を実行し、その後のような派生クラスであなたがやりたい:あなたが持っている

public override void OnDoSomeThing(EventArgs e) 
{ 

    base.OnDoSomeThing(e); 

    // write here whatever needed 

} 
+0

これを上に置くことは理にかなっています。私がイベントを呼び出すのを避けたいときには、ちょうどいくつかの 'if'文が必要になるかもしれません... – BendEg

+0

派生型のビジネスロジックが何であれ書くことができます。 –

+0

ありがとう、ありがとう! – BendEg

関連する問題