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

Jam*_*mes 10 .net c#

有人可以解释一下C#中的匿名方法(简单来说),并提供可能的例子

Jon*_*eet 20

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

匿名方法看起来像:

delegate (int x) { return x * 2; }
Run Code Online (Sandbox Code Playgroud)

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

Func<int, int> foo = delegate (int x) { return x * 2; };
Run Code Online (Sandbox Code Playgroud)

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

button.Click += delegate (object sender, EventArgs e) {
    // React here
};
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅:

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


Dar*_*usz 10

匿名方法是简单地没有名称的方法,并且此方法是在适当的位置声明的,例如:

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


Wil*_*l A 5

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

MSDN有使用匿名方法的示例.


Sha*_*ard 5

这些是没有名字的方法.

例如,普通方法是:

public void Foo()
{
   Console.WriteLine("hello");
}
Run Code Online (Sandbox Code Playgroud)

虽然匿名方法可以是:

myList.ForEach(item => Console.WriteLine("Current item: " + item));
Run Code Online (Sandbox Code Playgroud)

其中的代码ForEach实际上是一个方法,但没有名称,你不能从外面调用它.

  • 这不是一个匿名方法 - 它是一个lamdba表达式.Lambda表达式和匿名方法统称为匿名函数. (4认同)