2008-10-29 42 views
5

.NET中事件代表的標準模式有什麼意義?即EventHandler預定義的委託?爲什麼不選擇最適合該要求的簽名?.net中的事件簽名模式

編輯:此外,是否有必要在所有情況下嚴格遵循微軟的例子?

回答

3

這是主要的一致性和版本控制與sender paramater一如既往System.Object的和args參數一如既往一個System.EventArgs或其dervied類,你可以改變傳遞給它的寄件人蔘數以及變化EventArgs之後鍵入,不會破壞任何現有的代碼。

整個.NET事件成語被設計用於支持基於組件的開發,其中調用代碼不受組件開發人員與事件的控制。

2

它將來電者與被叫者分開。

3

這是一個很好的問題。異端,但很好。我最近閱讀了一篇博文(我找不到鏈接 - 是否有人有這樣的鏈接),它揭示了你需要總是重寫System.EventArgs以提供良好的事件處理的神話。

我完全遵守慣例和遵守規則,但這是我認爲可以被認爲是可彎曲的 - 如果不能避免的話。每個事件都需要不斷地覆蓋System.EventArgs,這增加了例程的耦合性 - 現在還有一件事需要跟蹤。

擁有一個提供成員的「e」並不比任何有名的參數集更有幫助或更直觀。我不認爲可以派發推薦的System.EventArg模式來贏得這個論據,但是我會和你一起提出這個論點。

RP

4

在C#1.0的約定並沒有做出很大的意義。在C#2.0中,如果存在一定數量的委託差異,則更有意義。

如果您有一個事件處理方法,並不真正關心參數,例如

public void SaveDocument(object sender, EventArgs args) 
{ 
    // Save the document here 
} 

你現在可以使用該方法來訂閱跟隨公約的任何活動,即使實際的發送者或ARG遊戲更嚴格的類型。這意味着您可以對鍵盤事件使用相同的處理程序,單擊按鈕等。