gpt4 book ai didi

c# - C# 编译器和虚拟机中如何处理 lambda 表达式?

转载 作者:行者123 更新时间:2023-11-30 16:56:40 24 4
gpt4 key购买 nike

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

最佳答案

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

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

  • 上述内容的主要异常(exception)是它将如何处理变量捕获。如果匿名方法捕获局部变量,则为此目的声明一个新类(也隐藏在您的代码中)并且该变量最终存储在类中而不是作为实际的局部变量,匿名方法当然会结束也是那个类(class)的。

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

正如其他人所建议的那样,如果您需要比这更多的细节,那么 StackOverflow 可能不是最好的答案(或者,如果它是最好的答案,肯定已经有人问过并回答过,您只是需要寻找答案)。您可以使用 ildasm.exe、dotPeek 等检查实际生成的代码,您可以阅读 C# 规范,或者您可以在网络上搜索其他详细信息。

关于c# - C# 编译器和虚拟机中如何处理 lambda 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27669894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com