2011-02-06 16 views
0

私はカスタムイベントをいくつかのクラスの中で作成し、クラス自体のためにイベントをブロードキャストするとしましょう。この場合、どのようにして継承を作成できますか?イベントが親から親に送られるのではなく、同じ子クラスの子クラスに送られたかのように私はどうすればよいのですか?コードを親で実行するのに対し、物理的にこの継承のために?C#カスタムイベント、継承とクロージャ

+4

非常に曖昧で、わかりませんが、私は適用可能なユースケースを見ません。いくつかのサンプルコードとあなたが達成しようとしているものの詳細な説明を提供することをお勧めします。 – abelenky

+4

私はその質問を理解していません。 – Amy

+0

質問は何ですか... –

答えて

2

派生クラスからベースクラスイベントを発生させる方法を尋ねていますか?
イベントデリゲートフィールドは、それを定義するクラス(このケースでは基本クラス)に対してプライベートなので、直接行うことはできません。ただし、基本クラスのイベントを発生させ、派生クラスから呼び出す保護されたメソッドを宣言できます。あなたは絶対にライザメソッドをオーバーライドする必要はありませんが、私はそれだけだと思う​​

class Base { 
    public event EventHandler Bang; 

    protected virtual void OnBang() 
    { 
     if (Bang != null) 
      Bang (this, EventArgs.Empty); 
    }  
} 

class Derived : Base { 
    public void DoSomething() 
    { 
     // let's bang for some fun 
     OnBang(); // will raise Bang 
    } 

    protected override void OnBang() 
    { 
     Console.WriteLine ("It's gonna bang now!"); 
     base.OnBang(); // if we remove this line, event will not be fired 
    } 
} 

注意:一般的に使用される表記はイベント調達ので、派生クラスが傍受(キャンセル)があり、このような方法On[EventName]を呼び出し、それを仮想的にするために提案します通常の方法でそれらを購読するよりも自分のイベントに反応するためのよりよい解決策です。

+0

派生クラスの基底クラスによって自動的に呼び出されたかったのです。 – user310291

+0

私はあなたの質問を少なくとも理解していたが、私の問題は解決されていないので、あなたの答えを良いものとしてチェックした。私はそれがクロージャで解決できると思う。 – user310291

+0

どういう意味ですか?イベントは自動的に呼び出されることはありません。どんな場合でもイベントを発生させる必要があります。基底クラスでイベントを発生させたい場合は、基底クラスから 'OnBang'を呼び出すだけで、同じ動作をします。 –