如果一个匿名方法捕获一个对象的字段,那么整个对象是否会被限制并且不会被收藏?
所以下面是一个片段,我想知道的是,只要没有从列表中删除匿名方法,SessionKeeper是否会保留对象f:
class Foo
{
public String State { get; set; }
public void KeepState()
{
SessionKeeper.Singleton.Add(delegate
{
//do something with this.State
});
}
}
Foo f = new Foo();
f.KeepState();
答案 0 :(得分:8)
如果一个匿名方法捕获一个对象的字段,那么整个对象是否会被限制并且不会被收藏?
这个问题预示着虚假,因此无法明智地回答。匿名方法只“捕获”本地,形式参数和this
,永远不会是类的字段。为了结束,类的字段,数组的元素等不被视为“外部变量”。
现在,如果该字段是本地的字段,那么您已使用本地,并且将捕获本地。但无论你是否将它用于其田地,它都会被捕获;这些领域没有进入。