2011-12-29 167 views
60

最近我一直在想,如果有這樣的代碼之間的任何差別顯著:自定義事件處理程序與事件處理<EventArgs>

public event EventHandler<MyEventArgs> SomeEvent; 

這一個:

public delegate void MyEventHandler(object sender, MyEventArgs e); 
public event MyEventHandler SomeEvent; 

他們都做同樣的事情,我一直無法說出任何區別。 雖然我注意到大多數.NET Framework類都使用自定義事件處理程序委託來處理它們的事件。這是否有特定的原因?

回答

67

你是對的;他們做同樣的事情。因此,你應該比前者更喜歡後者,因爲它更清晰並且需要更少的打字。

的原因,很多的.NET Framework類都有自己的自定義事件處理程序委託,是因爲他們是仿製藥(其允許的語法速記)在2.0版本中引入之前寫的。例如,幾乎所有的WinForms庫都是在泛型之前編寫的,而在那些日子裏,後者的形式只是的做事方式。

+0

謝謝你的回答。它讓事情變得更加清晰。 – haiyyu 2011-12-29 12:56:37

-1

第二種方式提供了更多的靈活性和類型安全。相應簽名的方法較少=>對於錯誤較少的地方。自定義委託允許指定您需要的確切參數(或指定任何人) - 沒有發件人+參與貨物崇拜。

+1

好奇爲什麼這是downvoted,似乎是自定義事件處理程序的完全合理的好處。 – Cerzi 2018-03-01 12:06:43