在以下两种情况下,有人可以解释捕获变量的语义:
(1)一个匿名方法(一个lambda表达式),它只捕获实例和静态(类)字段(但不捕获局部变量或参数),并且
(2)一个匿名方法,它捕获局部变量和参数,以及可能的实例和静态字段。
此外,闭包和捕获变量之间的关系是什么?
答案 0 :(得分:1)
闭包是一个对象(通常),它包含lambda使用的所有捕获变量。
如果lambda使用实例字段,它实际上是隐式捕获this
实例,然后访问其成员。
如果它只使用静态字段,则它根本没有闭包;可以在没有上下文的情况下访问静态字段。