好吧,我正在讨论“Lambda 表达式”主题(第 17 章;代表,代表的 C# 语法糖)。Jeffery 指出 C# 编译器会在后台创建一个新的非静态类,该类具有以下内容:
- 用于存储已在 Lambda 表达式中访问的所有局部变量的字段。
- 一种方法,其主体包含 Lambda 表达式,并且其签名/返回类型与已使用 Lambda 表达式的委托相匹配。
我有以下两个问题:
我自己做了一些调试,发现如果 Lambda 表达式修改了局部变量的值(在使用 lambda 表达式的方法中定义),新值也会反映在表达式主体之外。考虑到表达式实际上在不同的类中,这怎么可能?
当静态类可以完美地完成同样的事情时,为什么发出的类需要是非静态的?
我希望这不是一个我无法理解的非常简单的概念。
如果我需要提供更多详细信息,请告诉我。