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,以便它们可以将每个事件发送到多个目标方法。目标返回的任何值都将丢失 第一次打电话。
答案 0 :(得分:2)
对我来说是伪造的 - 'e'参数当然不是总是EventArgs
;它通常是一种派生自EventArgs
的类型。
ImageClickEventArgs
来自EventArgs
,所以这看起来很好。我怀疑它的FxCop比应该的要严格得多。
答案 1 :(得分:1)
According to this msdn article,FxCop希望您指定 EventHandler< ImageClickEventArgs>