2012-03-27 56 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