私はカスタムイベントをいくつかのクラスの中で作成し、クラス自体のためにイベントをブロードキャストするとしましょう。この場合、どのようにして継承を作成できますか?イベントが親から親に送られるのではなく、同じ子クラスの子クラスに送られたかのように私はどうすればよいのですか?コードを親で実行するのに対し、物理的にこの継承のために?C#カスタムイベント、継承とクロージャ
答えて
派生クラスからベースクラスイベントを発生させる方法を尋ねていますか?
イベントデリゲートフィールドは、それを定義するクラス(このケースでは基本クラス)に対してプライベートなので、直接行うことはできません。ただし、基本クラスのイベントを発生させ、派生クラスから呼び出す保護されたメソッドを宣言できます。あなたは絶対にライザメソッドをオーバーライドする必要はありませんが、私はそれだけだと思う
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]
を呼び出し、それを仮想的にするために提案します通常の方法でそれらを購読するよりも自分のイベントに反応するためのよりよい解決策です。
派生クラスの基底クラスによって自動的に呼び出されたかったのです。 – user310291
私はあなたの質問を少なくとも理解していたが、私の問題は解決されていないので、あなたの答えを良いものとしてチェックした。私はそれがクロージャで解決できると思う。 – user310291
どういう意味ですか?イベントは自動的に呼び出されることはありません。どんな場合でもイベントを発生させる必要があります。基底クラスでイベントを発生させたい場合は、基底クラスから 'OnBang'を呼び出すだけで、同じ動作をします。 –
- 1. groovyクロージャの継承
- 2. C++テンプレートクラスと継承
- 3. C++クラスの継承とテンプレート
- 4. C++のコンセプトチェックと継承
- 5. 継承とプライベート変数C++
- 6. c#インターフェイスと継承のベストプラクティス
- 7. C#のリフレクションと継承
- 8. C++友情と継承
- 9. C++のデストラクタと継承?
- 10. インターフェイスと複数継承C#
- 11. C++のテンプレートと継承
- 12. C++の継承
- 13. C++継承ポインタ
- 14. リンクエラーC++継承
- 15. C++継承 - QList
- 16. 継承objective-c
- 17. C++クラス継承
- 18. C++エコシステムシミュレータ(継承)
- 19. C#CodeProvider:クラス継承?
- 20. C#インタフェースの継承
- 21. C#の継承/クラス
- 22. C++ - 多重継承
- 23. C#Visual Basic継承
- 24. C++クラスの継承
- 25. C++の継承タイプ
- 26. C++多重継承
- 27. C# - 上級継承
- 28. C++ shared_ptr継承メモリリーク
- 29. C++の継承エラー
- 30. C++ - defenition - private継承
非常に曖昧で、わかりませんが、私は適用可能なユースケースを見ません。いくつかのサンプルコードとあなたが達成しようとしているものの詳細な説明を提供することをお勧めします。 – abelenky
私はその質問を理解していません。 – Amy
質問は何ですか... –