3

文字通り、何かが起こったことをユーザーに知らせるイベントがあります。イベントからデータが渡されないため、そのイベントに対して手動でアクションを実行する必要があります。

ただし、何がより慣用的なものになるかはわかりません。

public event Action MyEvent;
//clearly says no arguments
public event EventHandler MyEvent;
//uses the EventHandler class to no effect, but might be more idiomatic.
public event Action<object> MyEvent;
//just like the first but passes the sender if needed.

これを行う標準的な方法はどれですか?

4

1 に答える 1

8

慣用的なアプローチは、単に使用することEventHandlerです。適切な送信者がある場合は、適切な送信者を渡しnullますEventArgs.Empty

私はそれがややクレイジーであることを知っていますが、それは慣例です. プレーンEventArgsには有用な情報がないことに注意してください。そのため EventHandlerベースのイベントは基本的に「送信者を取得する可能性がありますが、おそらくそれだけです」と言っています。

ただし、C# 2 のデリゲートの分散により、これには利点があります。規則に従うすべてのイベントに対して同じイベント処理メソッドを使用できるため、(たとえば) リフレクションを使用してダンプするイベント ハンドラーをログに記録できます。コンパイル時に知らなくても、 で与えられた情報は何でもEventArgs

確かに、それは大会のための世界で最大の議論ではありません - しかし、それはかなり強力なものです. もちろん、ルーティング イベントのサブスクライブ方法はわずかに異なりますが、デリゲートは同じパターンに従います。

于 2013-09-25T21:48:30.553 に答える