イベントのデザイン

イベントは、アクションが発生したときにアプリケーション固有のコードを実行できるようにする機構です。 イベントには、関連するアクションの発生前に発生するもの (前イベント) とアクションの発生後に発生するもの (後イベント) があります。 たとえば、ユーザーがウィンドウのボタンをクリックすると、後イベントが発生し、アプリケーション固有のメソッドの実行が可能になります。 イベント ハンドラー デリゲートは、システムによってイベントが発生したときに実行されるメソッドにバインドします。 イベント ハンドラーをイベントに追加し、イベントの発生時にメソッドを呼び出すことができるようにします。 イベントには、イベント固有データを割り当てることができます。たとえば、マウス ダウン イベントには、画面上のカーソル位置に関するデータを含めることができます。

イベント処理メソッドのシグネチャは、イベント ハンドラー デリゲートのシグネチャと同じです。 イベント ハンドラー シグネチャは、以下の規則に従います。

  • 戻り値の型は Void です。

  • 1 つ目のパラメーターは、sender という名前の Object 型です。 これは、イベントを発生させるオブジェクトです。

  • 2 つ目のパラメーターは、e という名前の EventArgs 型または EventArgs の派生クラスです。これは、イベント固有データです。

  • メソッドは、これら 2 つのパラメーターだけを受け取ります。

イベントの詳細については、「イベントの処理と発生」を参照してください。

イベントには、イベントの起動 (fire) またはイベントのトリガー (trigger) ではなく、イベントの発生 (raise) という表現を使用してください。

イベント ハンドラーとして使用する新しいデリゲートを手動で作成する代わりに、System.EventHandler<T> を使用してください。

このガイドラインは、主に新しい機能領域に適用されます。 既に非ジェネリック イベント ハンドラーを使用している領域で機能を拡張する場合は、非ジェネリック イベント ハンドラーの使用を継続して、デザインの一貫性を維持できます。

ライブラリが対象とする .NET Framework のバージョンがジェネリックをサポートしていない場合は、このガイドラインに従うことができません。

イベント引数として System.EventArgs の派生クラスを使用することを検討してください。ただし、イベントによってデータをイベント処理メソッドに搬送する必要がないことが確実な場合は、System.EventArgs 型を直接使用できます。

定義した派生クラスの代わりに EventArgs インスタンスを受け取るイベントを定義した場合は、その後のバージョンではデータをイベントに追加できなくなります。 そのため、EventArgs の空の派生クラスを作成することをお勧めします。 これにより、互換性に影響する変更点を導入せずに、その後のバージョンでイベントにデータを追加できるようになります。

プロテクト仮想メソッドを使用して、各イベントを発生させてください。 これは、シールされていないクラスの非静的イベントだけに適合し、構造体、シール クラス、および静的イベントには適合しません。

このガイドラインに従うと、プロテクト メソッドをオーバーライドすることにより派生クラスで基本クラス イベントを処理できます。 プロテクト virtual (Visual Basic の場合は Overridable) メソッドの名前はイベント名と同じにし、名前の先頭に On を付ける必要があります。 たとえば、"TimeChanged" という名前のイベントのプロテクト仮想メソッドには、"OnTimeChanged" という名前を付けます。

重要 :重要

プロテクト仮想メソッドをオーバーライドする派生クラスは、基本クラス実装の呼び出しには必要ありません。基本クラスは、その実装が呼び出された場合でも正しく動作し続ける必要があります。

イベントを発生させるプロテクト メソッドには、イベント引数クラスとして型指定されたパラメーターを使用してください。 このパラメーターには、e という名前を付ける必要があります。

FontDialog クラスは、Apply イベントを発生させる次のメソッドを提供します。

Protected Overridable Sub OnApply( ByVal e As EventArgs )
protected virtual void OnApply(EventArgs e);

非静的イベントを発生させるときは、sender パラメーターとして null (Visual Basic の場合は Nothing) を渡さないでください。

静的イベントでは、sender パラメーターは、null (Visual Basic の場合は Nothing) にする必要があります。

イベントを発生させるときは、イベント データ パラメーターとして null (Visual Basic の場合は Nothing) を渡さないでください。

イベント データが存在しない場合は、null の代わりに Empty を渡します。

イベント処理メソッドで任意のコードを実行できるようにしてください。

イベント ハンドラーから処理できない例外がスローされた場合にプログラムが終了しないようにするために、イベントが発生するコードは、try-catch ブロックに配置するようにしてください。

エンド ユーザーがキャンセルできるイベントを発生させることを検討してください。 これは、前イベントだけに当てはまります。

キャンセル可能なイベントをデザインする場合は、e イベント データ オブジェクトの基本クラスとして、EventArgs の代わりに CancelEventArgs を使用してください。

Portions Copyright 2005 Microsoft Corporation. All rights reserved.

Portions Copyright Addison-Wesley Corporation. All rights reserved.

設計ガイドラインの詳細についてを参照してください、「フレームワークの設計ガイドライン。規則、慣用句、および再利用可能なパターン。ネット ライブラリ」本クシシュトフ Cwalina、ブラッド エイブラムス、アスキー、2005 年発表しました。

参照

概念

カスタム イベント ハンドラーのデザイン

その他の技術情報

メンバーのデザインのガイドライン

クラス ライブラリ開発のデザイン ガイドライン