2

FxCopは、私が持っているイベントハンドラー宣言について不平を言っています。警告を数回読んだにもかかわらず、コードの何が問題になっているのかわかりません。

ユーザーコントロールのコード

//This next line Fx Cops doesn't like.
public event ImageClickEventHandler NewEntity; //A thingy defined in the BCL

private void ImgBtnAdd_Click(object sender, ImageClickEventArgs e)
{
     NewEntity(sender, e);
}

コントロールを使用するページ内のコード

protected override void OnInit(EventArgs e)
{
EntitySearch1.NewEntity += EntitySearch1_NewEntity;
//etc.
}

しかし、FxCopは次のように述べています。

慣例により、.NETイベントには、イベント送信者とイベントデータを指定する2つのパラメーターがあります。イベントハンドラの署名は、次の形式に従う必要があります:void MyEventHandler(object sender、EventArgs e)。より具体的なタイプを使用できる場合でも、「sender」パラメーターは常にSystem.Objectタイプです。'e'パラメータは常にSystem.EventArgsタイプです。イベントデータを提供しないイベントは、System.EventHandlerデリゲート型を使用する必要があります。イベントハンドラはvoidを返すため、各イベントを複数のターゲットメソッドに送信できます。ターゲットから返された値は、最初の呼び出し後に失われます。

4

2 に答える 2

2

私には偽物に見えます-'e'パラメータは確かに常にではありませEventArgsん; これは、従来、から派生したタイプEventArgsです。

ImageClickEventArgsから派生してEventArgsいるので、これは私には問題ないように見えます。FxCopが本来よりも少し厳しいのではないかと思います。

于 2009-04-23T16:32:17.283 に答える
1

このmsdnの記事によると、FxCopではEventHandler<ImageClickEventArgs>を指定する必要があります。

于 2011-07-12T13:45:20.357 に答える