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);
}

Page 中使用控件的代码

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

但 FxCop 说:

按照惯例,.NET 事件有两个参数来指定事件发送者和事件数据。事件处理程序签名应遵循以下形式: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 回答