2013-04-27 36 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只是一种创建匿名方法(或表达式树取决于上下文)的简短形式。