【发布时间】:2009-01-08 15:46:30
【问题描述】:
关于最佳实践是什么的一般性问题:
public void Foo()
{
int x = 5;
myControl.Click += (o, e) =>
{
x = 6;
};
}
注意,我在我的 lambda 事件处理程序中使用了 x 变量。
或者:
public class Bar
{
private int x = 5;
public void Foo()
{
Control myControl = new Control();
myControl.Click += new EventHandler(myControl_Click);
}
private void myControl_Click(object sender, EventArgs e)
{
x = 6;
}
}
这里,x 是该类的私有成员,因此我可以在我的事件处理程序中访问它。
现在假设我在代码中的其他任何地方都不需要x(无论出于何种原因),哪种方法更好?
【问题讨论】:
-
我不习惯那种关闭的东西,我想我不明白...第一种方式,当 myControl.Click 被触发并且没有 x 时会发生什么范围( Foo() 已返回)?
-
幕后发生的事情是私有类是用 x 作为实例变量创建的。在这种情况下,x 被复制到私有类。没有副作用,因为 x 是该方法的本地范围。
标签: c# lambda closures variable-declaration