C#中的匿名方法是什么?

时间:2011-05-15 11:29:20

标签: c# .net

有人可以解释一下C#中的匿名方法(用简单的术语表示)并提供可能的例子吗

4 个答案:

答案 0 :(得分:20)

匿名方法被引入到C#2中,作为创建委托实例的一种方式,而无需编写单独的方法。他们可以在封闭方法中捕获局部变量,使它们成为闭包的形式。

匿名方法类似于:

delegate (int x) { return x * 2; }

并且必须转换为特定的委托类型,例如通过转让:

Func<int, int> foo = delegate (int x) { return x * 2; };

...或订阅事件处理程序:

button.Click += delegate (object sender, EventArgs e) {
    // React here
};

有关详细信息,请参阅:

请注意,C#3中的lamdba表达式几乎完全替换了匿名方法(尽管它们当然仍然完全有效)。匿名方法和lambda表达式统称为匿名函数

答案 1 :(得分:10)

匿名方法是一种根本没有名称的方法,并且此方法已在适当位置声明,例如:

Button myButton = new Button();
myButton .Click +=
delegate
{
    MessageBox.Show("Hello from anonymous method!");
};

答案 2 :(得分:5)

匿名方法是一个代码块,用于通常需要方法且没有名称的地方(因此是匿名的)。

MSDN有examples of using anonymous methods

答案 3 :(得分:5)

这些是没有名字的方法。

例如,普通方法是:

public void Foo()
{
   Console.WriteLine("hello");
}

虽然匿名方法可以是:

myList.ForEach(item => Console.WriteLine("Current item: " + item));

ForEach内的代码实际上是一种方法但没有名称,你不能从外面调用它。