このシナリオを検討してください。私はオブジェクトを持っている、それを呼び出すことができます....フー。 Fooは "Loaded"という単純なイベントを発生させます。イベントの情報の一部として、消費者はどのfooオブジェクトがイベントを発生させたのかを知る必要があります。私たちのチームは以下のパターンを採用しました。C#シンプルなイベントの発生 - 「送信者」とカスタムEventArgsの比較
1)EventArgsを継承する新しいクラスを作成します。たとえば、 FooEventArgs:System.EventArgsのようにします。
2)FooEventArgsにFoo型のプロパティを追加します。このプロパティは、コンストラクタを介して渡されることによって設定されます。
3)イベントハンドラのジェネリックバージョンを使用してイベントを宣言し、そう
public event EventHandler<FooEventArgs> Loaded;
)以下のシグネチャとのFooクラスのイベントを上げ:
Loaded(this, new FooEventArgs(this));
は、本質的にこれはないことです"送信者"をfooオブジェクトにしますが、でもは、fooオブジェクト参照をイベント引数に強く型付けされたプロパティとして配置します。
これを行うメリットの1つは、イベントを処理するときに誰も "送信者"をキャストしなくてはならず、イベントコンシューマーとイベントライザー間の結合を低下させることです。別の「利点」は、イベントライザーのタイプが変更されなければならないため、厳密に型指定されたプロパティ(うまくいけないことはない)がnullの場合、単にキャストで失敗するようにするのではなく、 APIが実際にブレークしてコンパイル時に修正される可能性があります。
私にとっては、このパターンは過度なことがあるようです。彼らは "送信者"のパラメータをより信頼し、カスタムイベントの引数を削除する必要がありますか?私のチームは誰も実際に送信側パラメータを使用しないと主張しています。イベントを呼び出すオブジェクトへの参照を渡すためのベストプラクティスは何ですか?
EDIT:今までの偉大なフィードバックは、私が1つを受け入れる前にこれをもう1日ほど開いたままにしておきます。
として頻繁に使用されるDOTNET 1.1を、考えるのは簡単です、あなたは、「イベントの署名を見てしたい場合があります.NETで - 強い型付きの '送信者'を使用していますか? "ここでは:http://stackoverflow.com/questions/1046016/event-signature-in-net-using-a-strong-typed-sender –