2013-10-22 66 views
0

我來自Java背景,目前正在學習c#。通過鑄造委託向事件添加方法?

我明白,當一個人想訂閱的方法,以一個事件,一個確實是這樣的:

button.Click += HandleClick; 

void HandleClick (object sender, EventArgs e) { 
    button.Text = string.Format (count++ + " clicks!"); 
} 

然而,人們似乎可以寫像下面這樣:

button.Click += delegate {button.Text = string.Format (count++ + " clicks!");}; 

我們是否將方法轉換爲委託?我認爲這個事件想要一個方法來訂閱它?什麼東西在上面?

回答

2

我們是否將該方法轉換爲委託?

嘛,你不投 - 但您使用的是方法組轉換的方法名轉換成一個代表。

我以爲事件想要一個方法來訂閱它嗎?

否,事件需要委託訂閱它(或從中取消訂閱)。您可以從創建一個委託實例的方法,無論是與你的代碼已經給或更明確:

button.Click += new EventHandler(HandleClick); 

甚至將二者分開:

EventHandler handler = HandleClick; // Method group conversion 
button.Click += handler;   // Event subscription 

...或者你可以從匿名函數(匿名方法或lambda表達式)創建委託實例。

有關更多信息,請參閱我的article on delegates and events

0

delegate關鍵字正在創建一個新的匿名方法。然後(隱式)創建一個代表該匿名方法的委託,並將該代理添加爲該事件的代表之一。