2013-04-27 57 views
2

我剛買了Xamarin學生版,並在開始的教程中閱讀。代表或Lambda?

我找到這個代碼示例

lambda表達式如下面的例子:

aButton.Click += (sender, e) => { 
    aLabel.Text = "Hello from the button"; 
}; 

相反,我們可以使用與委託語法C#2.0匿名方法:

aButton.Click += delegate(object sender, EventArgs e) { 
    aLabel.Text = "Hello from the button"; 
}; 

來源是here

我的問題NS是

  1. 當或者我爲什麼要使用委託(是我看過C#文檔)

  2. 什麼是在這種情況下更好?拉姆達或代表?

要清楚:代碼沒有問題我只是無法找出爲什麼我應該使用第一種或第二種方法。

+1

有幾種情況(特別是在與舊的.NET 2.0方法接口時)需要傳入一個'delegate',而且不能簡單地寫一個內聯lambda。除此之外,_generally_ lambdas現在在發展社區中受到青睞。至於你上面的具體用法,AFAIK沒有功能差異。 (如果他們編譯到相同/相似的IL,我實際上可能不會感到驚訝) – 2013-04-27 12:58:52

+0

謝謝@ChrisSinclair現在更清楚了,也感謝答案martin mulder – JochemQuery 2013-04-27 13:00:33

+2

正如另一個註釋。有關的種類。當需要註銷事件以避免泄漏時,請小心不要註冊匿名方法。 'aButton.Click - =(sender,e)=> {...}'與註冊的lambda不同,所以另一個不會註冊並且會泄漏。爲了避免這個,創建一個命名方法。創建一個「aButton.Click + = OnClick」並不困難。 – 2013-04-27 13:19:32

回答

4

沒有區別!

匿名方法附帶C#2.0。 Labmda附帶C#3.0。

Labmda只是一種創建匿名方法(或表達式樹取決於上下文)的簡短形式。