Rus*_*Yan 1 c# closures garbage-collection
如果一个匿名方法捕获一个对象的字段,那么整个对象是否会被限制并且不会被收集?
所以下面是一个片段,我想知道的是,只要没有从列表中删除匿名方法,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();
Run Code Online (Sandbox Code Playgroud)
如果一个匿名方法捕获一个对象的字段,那么整个对象是否会被限制并且不会被收集?
这个问题预示着虚假,因此无法得到明智的回答.匿名方法只能"捕获"本地,形式参数this
,而不是类的字段.为了结束,类的字段,数组的元素等不被视为"外部变量".
现在,如果该字段是本地字段,那么您已经使用了本地字段,并且将捕获本地字段.但无论你是否将它用于其田地,它都会被捕获; 田地不进入它.
归档时间: |
|
查看次数: |
157 次 |
最近记录: |