如何在C#Compiler&amp ;;中处理lambda表达式虚拟机?

时间:2014-12-27 17:51:00

标签: c# .net lambda clr

C#编译器和虚拟机( .NET公共语言 - 运行时)如何处理lambda中的C#函数?它们通常被翻译成正常的函数,但在编译器中在某种意义上被标记为“匿名”,然后被视为正常函数,还是有不同的方法?

1 个答案:

答案 0 :(得分:2)

可能太宽泛了。也就是说,可以轻松提供一些基本信息:

  • 首先,"匿名"只是意味着没有名称可以引用代码中的方法 。任何匿名方法,无论是使用较旧的delegate语法还是较新的lambda语法声明,仍然会被编译为具有实际名称的方法到某个类(编译器创建的自己的或新的)目的......见下文)。您根本无法在自己的代码中访问该名称。除此之外,它基本上就像任何其他方法一样。

  • 以上的主要例外是如何处理变量捕获。如果匿名方法捕获局部变量,那么为此目的声明一个新类(也隐藏在您的代码中),并且该变量最终存储在类中而不是作为实际的局部变量,并且匿名方法当然是winds也是在那门课上。

  • 最后请注意,lambda语法不仅用于匿名方法,还用于声明Expression类的实例。在这种情况下,一些处理方式类似,但当然,您不会像匿名方法那样将类型编译到代码中。

正如其他人所建议的那样,如果您需要更多详细信息,那么StackOverflow可能不是答案的最佳位置(或者,如果它是答案的最佳位置,肯定已经被问到了回答,你只需要搜索答案)。您可以使用ildasm.exe,dotPeek等来检查实际生成的代码,您可以阅读C#规范,也可以在网上搜索其他详细信息。

相关问题