更新 : 2007 年 11 月
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);
}