如何声明事件处理程序传递FxCop规则,特别是包括发件人和e?

时间:2009-04-23 16:18:33

标签: c# asp.net fxcop

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事件有两个参数,用于指定事件发送方和事件数据。事件处理程序签名应遵循以下格式:void MyEventHandler(object sender,EventArgs e)。 'sender'参数始终是System.Object类型,即使可以使用更具体的类型。 'e'参数始终为System.EventArgs类型。不提供事件数据的事件应使用System.EventHandler委托类型。事件处理程序返回void,以便它们可以将每个事件发送到多个目标方法。目标返回的任何值都将丢失 第一次打电话。

2 个答案:

答案 0 :(得分:2)

对我来说是伪造的 - 'e'参数当然不是总是EventArgs;它通常是一种派生自EventArgs 的类型。

ImageClickEventArgs来自EventArgs,所以这看起来很好。我怀疑它的FxCop比应该的要严格得多。

答案 1 :(得分:1)

According to this msdn article,FxCop希望您指定 EventHandler< ImageClickEventArgs>