2012-03-27 72 views
0

我目前正在通过我们的应用程序运行FxCop的过程,这个应用程序已经开发了大约一年了。Microsoft不遵循UseGenericEventHandlersInstances FxCop规则

我不确定的一个规则是UseGenericEventHandlersInstances。我明白如何实现它,但除了保存必须为每个自定义事件处理程序定义委托的步骤之外,并没有真正看到好处。在我们的例子中,我们已经创建了这些代表,并且我想知道是否有任何改变我们事件处理程序的好处,或者应该禁用此规则。

在我有限的经验中,几乎所有的FxCop规则似乎都遵循微软和.NET框架。但是,在这种情况下,这是不正确的。 .NET框架使用我们已经使用的传统方法,至少为所有我研究过的鼠标和键区事件处理程序声明委托。没有人知道为什么微软会做或不做某事,但这进一步让我质疑这个规则的有效性和好处。

回答

1

在最近版本的.NET BCL中看到的大多数非泛型代理都是在泛型引入之前创建的。将预先存在的事件更改为使用EventHandler将会是一个突破性的改变,同样可以删除其他代码可能使用的公共代理人__EventHandler。但是,对于由BCL公开的新事件,EventHandler有相当多的用途,因此假定Microsoft不遵守新代码的规则是不正确的。

就你而言,如果更改旧的事件声明将是一个突破性更改或价值较低,您可以选择抑制现有的违规规则。当然,即使对于新事件,您也可以选择忽略规则,但我不确定为什么要这样做,因为遵循该规则实际上避免了原始开发人员不必要的工作,同时增强了API的可用性。

+0

除了不必定义委托,真正的节省是多少?您仍将该事件绑定到特定的自定义EventArgs类,所以我没有看到可用性增益。 – WPFNewbie 2012-03-27 14:28:26

+0

您是否有Microsoft使用新通用方法的示例事件?我无法看到任何。 – WPFNewbie 2012-03-27 14:29:27

+0

定义一个较少的代表对于作者来说有点收获。不需要查看YetAnotherEventHandler代表的是消费者的收益(可以说是更大的收益)。至于在BCL中使用EventHandler 的例子,有很多。我在mscorlib中找到的第一个公共的是System.AppDomain.FirstChanceException。 – 2012-03-27 18:50:39