【问题标题】:What are anonymous methods in C#?C# 中的匿名方法是什么?
【发布时间】:2011-05-15 11:29:19
【问题描述】:

谁能解释一下 C# 中的匿名方法(用简单的术语)并提供可能的示例

【问题讨论】:

标签: c# .net


【解决方案1】:

匿名方法被引入 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 表达式统称为匿名函数

【讨论】:

  • 值得补充的是,匿名方法存在于本地范围内,这意味着它们不能在程序的其他地方共享或暴露在程序集中。如果你需要重用代码你需要写一个可以调用的专用方法。
  • @Damian:我认为不值得大声疾呼——我不记得曾经出现过某人想要做的事情(不像匿名类型)。我认为从语法上就很明显了。
【解决方案2】:

匿名方法是没有名称的方法,并且该方法已就地声明,例如:

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

【讨论】:

  • 这是一个隐含的动作吗?如果我将它分配给一个变量,然后将变量添加到myButton.Click,我将不得不使用 EventHandler 作为变量类型,即使它不使用参数。
【解决方案3】:

匿名方法是在通常需要方法但没有名称(因此是匿名的)的地方使用的代码块。

MSDN 有examples of using anonymous methods

【讨论】:

  • 那么你就不需要创建一个类了吗?我假设可以从任何其他方法调用该方法?
  • @James - 不,您不需要创建一个类来保存匿名方法。该方法可以从它传递到的任何地方调用——你不能在没有引用它的情况下在以后调用它——它是匿名的。
  • 谢谢,您能否指定可能需要匿名方法的情况?
  • @James - 我不得不承认 C# 不是我选择的语言,所以我实际上并没有使用匿名方法。不过,我相信其他人可以回答这个问题。
【解决方案4】:

这些是没有名字的方法。

比如普通的方法是:

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

虽然匿名方法可以是:

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

ForEach里面的代码其实是一个方法,但是没有名字,不能从外面调用。

【讨论】:

  • 这不是匿名方法 - 它是 lamdba 表达式。 Lambda 表达式和匿名方法统称为匿名函数。
  • 谢谢@Jon 我只是想按照 OP 请求“以简单的方式”坚持使用简单的话。为 300K 干杯! ;)
猜你喜欢
  • 2010-11-05
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-01
  • 1970-01-01
相关资源
最近更新 更多