假设我有三个对象:'a','b'和'c'.对象'a'和'c'是长寿的,静态引用的服务单例.对象'b'是短暂的,即没有静态引用使其保持活动状态.
现在假设对象'a'在其一个方法的范围内创建对象'b'的实例,例如
B b = new B();
Run Code Online (Sandbox Code Playgroud)
进一步假设B类看起来像这样:
public B ()
{
C.ActionList.Add ( SomeMethod );
}
void SomeMethod ()
{
...
}
Run Code Online (Sandbox Code Playgroud)
现在,对象'b'存活了多长时间?我的推测是,它超出了称为构造函数的方法的范围; 具体来说,只要它的方法仍然在对象'c'的'ActionList'中.
那是对的吗?如果没有,它会被垃圾收集,当'c'运行'ActionList'中的所有方法时会发生什么?
额外的问题:如果'b'上的方法没有被命名,但匿名并在构造函数中写入如下,该怎么办?
public B ()
{
C.ActionList.Add ( () => {
...
} );
}
Run Code Online (Sandbox Code Playgroud)