假设你的表单上有一个按钮。你在按钮的Click
事件中附加了一个匿名函数:
void Test()
{
int x = 10;
btn.Click += (sender, e) => { MessageBox.Show(x.ToString()); };
}
这段代码按预期工作,显示10;这意味着它可以访问局部变量。我的问题是如何以及为什么?匿名函数如何访问局部上下文?
我实际处理的问题是,我需要将这个匿名函数升级(也就是说)为常规函数(事件处理程序)。但这样做意味着我将无法访问变量x。我也不能把它作为参数传递,因为那样我就无法将其附加到单击事件(签名不匹配)。我可以通过创建全局变量等来解决这个问题,但匿名函数如何使得访问其范围外的东西成为可能?
EventHandler handler = (sender, e) => { ... }
- Jon Skeet