我正在使用new关键字将可变类实例初始化为局部变量。然后我将此对象作为参数传递给委托。该变量的生命周期是否由代表扩展?其他线程是否使用此变量或创建自己的实例?我可能会问明显但我想确定。
public void DoSometing(Action<Foo> action)
{
Foo foo = new Foo();
action.Invoke(foo);
}
答案 0 :(得分:3)
每当您传递以某种方式“转义”方法的局部变量时,执行延长其生命周期。在C#中,您永远不会对包含对不存在对象的引用的变量进行操作 - 这个概念在托管环境中没有意义。
所以是的,foo
将继续存在,你将需要关注线程安全,就像你简单地调用另一个普通方法一样。在这种情况下,lambdas不会改变问题的面貌。
然而,有时这可能会更加微妙,特别是如果你返回一个lambda - 一个closes超过局部变量的lambda。在这种情况下,您在lambda中引用的所有变量都以与foo
相同的方式存在。