次の方法で共有


イベント ハンドラを適切に宣言します

更新 : 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);
}

関連規則

参照できるイベント ハンドラを再確認します

参照

概念

イベントとデリゲート

参照

System.EventArgs

System.Object