2012-05-02 55 views
2

我在樣板代碼中看到很多重複的以下參數,但我似乎沒有使用它們呢?爲什麼這些參數是事件的默認值?

(object sender, EventArgs e)

e.g如果我在一個新的按鈕,依次雙擊事件的方法有這些參數,然而,當我將代碼添加到方法我不使用的參數。

他們是什麼?我什麼時候使用它們?

回答

7

發件人是事件的發起者 - 因此,您可能有多個使用相同點擊處理程序的按鈕,例如,您想禁用任何按鈕被點擊的按鈕。當然,如果您只使用事件處理程序訂閱單個來源的事件,這並不是非常有用。

EventArgs本身是非常沒有意義的,因爲它沒有信息 - 但它用作其他類這有信息(如鍵盤和鼠標信息)的基類。有它的好處是,如果不需要需要額外的信息,您可以創建一個事件處理程序,可用於訂閱任何遵循該模式的事件事件。例如:

button.Click += LogEvent;  // EventHandler delegate type 
textArea.KeyDown += LogEvent; // KeyEventHandler delegate type 

... 

private static void LogEvent(object sender, EventArgs ignored) 
{ 
    Control control = (Control) sender; 
    Log("Event fired by " + control.Name); 
} 
+0

我懷疑作爲語言的新手我可以保留您的答案以後再提及嗎?即,直到我完全理解事件和代表我應該接受這些參數作爲默認的某些方法。 – whytheq

+0

值得補充的是,在.net框架中有一個預定義的委託,用於具有(object,EventArgs)參數的事件。所以用戶在使用這種事件時不需要創建委託。 –

+1

@Romil - cool;所以用這個簽名創建一個事件將意味着有一個後臺代理 – whytheq

相關問題