2011-05-18 21 views
9

讀我的C#的書,它談論使用事件/委託(我假設我是正確的思維的事件是不具有成員變量訪問公共委託相當於)由MS喜歡的模式:我應該使用EventHandler <T>和/或EventArgs委託模式嗎?

public delegate Something(object o, EventArgs e) 

然後接着解釋有關EventArgs<T>這基本上消除了對委託聲明的必要性:

public EventHandler<SomeEventArgs> events 

這是一樣的(我認爲)

private delegate Something(object o, SomeEventArgs e); 

public event Something events; 

使用EventHandler是個好主意嗎?我明白了爲什麼發送object可能會有用,但並非所有時間 - 而且很多時候,EventArgs可能會變得很煩人。

+3

就我個人而言,我不是目前形式的事件處理程序模式的粉絲。實際上你的最後一句話很好地總結了我的理由。 – ChaosPandion 2011-05-18 17:10:29

回答

9

微軟肯定已經推出了一些與C#合作愉快體驗的偉大模式。話雖如此,我建議您編寫您的事件處理程序以方便您的客戶端代碼,而不是爲了滿足某種模式而編寫大量代碼。

delegate void ClientMessageHandler(IClient client, IMessage message); 
+1

是不是這幾乎完全相同,我的第三代碼部分,除了IClient而不是對象和IMessage而不是EventArgs?如果是這樣,除了必須確保我實現IClient和IMessage之外,我沒有看到我從中獲得什麼...瞭解我,我錯過了一些大事;-) – 2011-05-18 17:22:07

+2

@The Duck Duck - 不同之處在於你是從來不確定'sender'沒有檢查文檔。事件提升者還必須初始化一個'EventArgs'對象來包裝'IMessage'實例。這個代表簽名本身就是有說服力的。 – ChaosPandion 2011-05-18 17:24:55

+0

另請參閱以下其他方法:http://stackoverflow.com/questions/809609/c-sharp-simple-event-raising-using-sender-vs-custom-eventargs – 2012-08-29 16:15:39

相關問題