2011-01-28 14 views
4

私は実際に何をしているのか考えずに、カスタムのデリゲートタイプと汎用のActionデリゲートタイプを使ってイベントを楽しく書いています。イベントに常にEventHandlerを使用する必要がありますか?

私はそれはさておき、私はむしろ私自身よりも、これらの定義済みデリゲート型を使用する傾向がありますActionEventHandlerのためのいくつかの素晴らしい拡張ヘルパーを持っていますが、...

有利にする慣例以外の良い理由がありますカスタムデリゲートタイプの場合はEventHandlerEventHandler<T>、デリゲートタイプの場合はActionです。

答えて

7

EventArgsのメンバーごとに1つのパラメータを使用することの主な利点は、互換性を損なうことなくEventArgsに追加のプロパティを追加できることです。
これは最も重要な議論です。あなたのEventArgsを購読しているコードを壊さずに広げることができることはとても素晴らしいことです。もちろん、プロパティごとにパラメータの代わりに何らかの種類のproperty-bagパラメータを使用する任意のシグネチャで同じことを達成できます。

はその後EventHandler<Base>EventHander<Derived>に変換され、分散があるので、あなたはパラメータEventArgsとのEventHandlerを書き込むことができ、より具体的なEventArgsを持つイベントを購読することができます。

拡張メソッドはもう一つのプラスですが、すでに説明しました。

+0

私はこれらの議論が好きです。私はEventArgsクラスの作成に固有の余計な努力のためにAction <>に傾いていると思います。次回よりもっと慎重に自分の選択を検討します:) – Andy

2

いいえ、正当な理由はありません。

イベントにEventArgsまたはsenderオブジェクトが必要ない場合は、EventHandlerまたはEventHandler<T>を使用する必要はありません。

1

理由は、EventHandlerというのは、イベントを扱う統一された方法をサポートしているからです。

例えば、EventHandlerには、常にsenderが便利です。

ここでは、WinFormsを使用してカスタムコントロールを作成しているときや、 Formの場合は、実際にEventHandlerを使用してください。あなた自身のクラスのために:野生に行ってください。

関連する問題