.NET のカスタム イベントに関して、イベント引数を渡すための推奨される設計パターンは何ですか? 発生する可能性のあるイベントごとに個別のEventArgs派生クラスを用意する必要がありますか?それとも、イベントがすべて同じクラスのイベントによって発生する場合は、イベントに対して 1 つのクラスを使用してもかまいませんか?
4 に答える
イベントごとに個別の EventArgs 派生クラスを用意する必要はありません。車輪を再発明するのではなく、既存の EventArgs 派生クラスを使用することは完全に受け入れられ、望ましいことですらあります。
これらは、既存のフレームワーク クラスである可能性があります (たとえば、イベント ハンドラーにアクションをキャンセルする可能性を与えるだけの場合は、System.Component.CancelEventArgs.
または、イベント ハンドラーに渡すアプリケーション固有のデータがある場合は、独自の EventArgs 派生クラスを作成できます。同じクラスまたは異なるクラスの 2 つのイベントが同じデータを送信している場合、同じ EventArgs 派生クラスを使用してはならない理由はありません。
私は通常、各イベントに共通のデータを持つ基本 EventArgs クラスを作成します。特定のイベントにさらにデータが関連付けられている場合は、そのイベントのサブクラスを作成します。それ以外の場合は、基本クラスを使用します。
OABと同様に、使用するコンポーネントまたはアプリケーションに固有のデータを追加することでEventArgsを拡張するカスタムの「base」argsクラスを作成します。たとえば、会計エクスポートアプリケーションでは、ベースのExportEventArgsがAccountNoプロパティを追加します。
イベントが何であるかによって異なりますが、ほとんどの場合、イベントを消費する人のために、EventArgs から派生する単一のカスタム クラスを作成します。