gpt4 book ai didi

c# - C# 闭包中的 Lambda 表达式吗?

转载 作者:IT王子 更新时间:2023-10-29 03:46:17 24 4
gpt4 key购买 nike

lambda 表达式(在某种程度上,匿名函数)是闭包吗?

我对闭包的理解是它们是被视为对象的函数,这似乎是对匿名函数和 Lambda 表达式的作用的准确表示。

将它们称为闭包是否正确?我知道闭包是由于 lisp 方言而出现(或变得流行),但它也是一个通用的编程术语吗?

感谢您提供的任何说明!

最佳答案

lambda 可以使用闭包来实现,但它本身不一定是闭包。

A closure是“一个函数以及该函数的非局部变量的引用环境。”。

当您创建使用在方法外部定义的变量的 lambda 表达式时,必须使用闭包来实现 lambda。例如:

int i = 42;

Action lambda = () => { Console.WriteLine(i); };

在这种情况下,编译器生成的方法必须能够访问在完全不同的范围内定义的变量 (i)。为了让它工作,它生成的方法是一个“函数与引用环境”——基本上,它创建一个“闭包”来检索对变量的访问。

但是,这个 lambda:

Action lambda2 = () => { Console.WriteLine("Foo"); }

不依赖于任何“引用环境”,因为它是一个完全包含的方法。在这种情况下,编译器生成一个普通的静态方法,根本不涉及闭包。

在这两种情况下,lambda 都在创建一个delegate(“函数对象”),但它只是在第一种情况下创建一个闭包,因为 lambda 不一定需要“捕获”所有情况下的引用环境。

关于c# - C# 闭包中的 Lambda 表达式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9591476/

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