Lambda 捕获变量的语义

Lambda 捕获变量的语义,lambda,closures,Lambda,Closures,有人能解释一下在以下两种情况下捕获的变量的语义吗 (1) 仅捕获实例和静态(类)字段(但不捕获局部变量或参数)的匿名方法(lambda表达式),以及 (2) 一种匿名方法,用于捕获局部变量和参数,可能还有实例和静态字段 另外,闭包和捕获变量之间的关系是什么?闭包是一个对象(通常)包含lambda使用的所有捕获变量 如果lambda使用实例字段,那么它实际上是隐式地捕获这个实例,然后访问其成员 如果它只使用静态字段,那么它根本没有闭包;静态字段可以在没有上下文的情况下访问。这是否意味着将(由C#编

有人能解释一下在以下两种情况下捕获的变量的语义吗

(1) 仅捕获实例和静态(类)字段(但不捕获局部变量或参数)的匿名方法(lambda表达式),以及

(2) 一种匿名方法,用于捕获局部变量和参数,可能还有实例和静态字段

另外,闭包和捕获变量之间的关系是什么?

闭包是一个对象(通常)包含lambda使用的所有捕获变量

如果lambda使用实例字段,那么它实际上是隐式地捕获
这个
实例,然后访问其成员


如果它只使用静态字段,那么它根本没有闭包;静态字段可以在没有上下文的情况下访问。

这是否意味着将(由C#编译器)为上述(1)和(2)两种情况创建闭包?或者这对于(1)是不必要的,因为lambda本身不会有局部变量?@JoeBennett:对于C#,这取决于您如何定义“闭包”。如果您只捕获它,编译器可以简单地将其转换为实例方法并创建一个闭合委托。如果关闭其他变量,则需要创建一个闭包类。看到和