CA1009: イベント ハンドラーを正しく宣言します
TypeName |
DeclareEventHandlersCorrectly |
CheckId |
CA1009 |
[カテゴリ] |
Microsoft.Design |
互換性に影響する変更点 |
あり |
原因
パブリック イベントまたはプロテクト イベントを処理するデリゲートに、適切なシグネチャ、戻り値の型、またはパラメーター名がありません。
規則の説明
イベント ハンドラー メソッドでは 2 つのパラメーターを使用します。1 つ目は System.Object 型で、"sender" という名前です。これは、イベントを発生させるオブジェクトです。2 つ目は System.EventArgs 型で、"e" という名前です。これは、イベントに関連付けられるデータです。たとえば、ファイルが開かれるたびにイベントが発生する場合、一般に、イベント データにはファイル名が含まれます。
イベント ハンドラー メソッドでは値を返さないでください。C# プログラミング言語では、これは戻り値の型 void で示されます。イベント ハンドラーは、複数のオブジェクトで複数のメソッドを呼び出すことができます。メソッドで値を返すことが許可された場合、イベントごとに複数の値が返り、呼び出された最後のメソッドの値のみが使用できるようになります。
違反の修正方法
この規則違反を修正するには、デリゲートのシグネチャ、戻り値の型、またはパラメーター名を正しく指定します。詳細については、以下の例を参照してください。
警告を抑制する状況
この規則による警告は抑制しないでください。
使用例
イベント処理に適したデリゲートを次の例に示します。このイベント ハンドラーで呼び出せるメソッドは、デザイン ガイドラインで指定したシグネチャに一致します。AlarmEventHandler はデリゲートの型名です。AlarmEventArgs はイベント データの基本クラス EventArgs から派生し、警告イベント データを保持します。
Imports System
Namespace DesignLibrary
Public Delegate Sub AlarmEventHandler(sender As Object, e As AlarmEventArgs)
Public Class AlarmEventArgs
Inherits EventArgs
End Class
End Namespace
using System;
namespace DesignLibrary
{
public class AlarmEventArgs : EventArgs {}
public delegate void AlarmEventHandler(object sender, AlarmEventArgs e);
}
using namespace System;
namespace DesignLibrary
{
public ref class AlarmEventArgs : public EventArgs {};
public delegate void AlarmEventHandler(
Object^ sender, AlarmEventArgs^ e);
}