【发布时间】:2014-05-26 02:13:52
【问题描述】:
假设我有三个对象:“a”、“b”和“c”。 对象“a”和“c”是长期存在的、静态引用的服务单例。 对象“b”是短暂的,即没有静态引用使其保持活动状态。
现在假设对象“a”在其方法之一的范围内创建对象“b”的实例,例如
B b = new B();
进一步假设 B 类看起来像这样:
public B ()
{
C.ActionList.Add ( SomeMethod );
}
void SomeMethod ()
{
...
}
现在,对象“b”能存活多久?我的假设是它超出了调用其构造函数的方法的范围;具体来说,只要它的方法仍在对象'c'的'ActionList'中。
正确吗?如果不是,并且它会被垃圾回收,那么当“c”运行其“ActionList”中的所有方法时会发生什么?
额外问题:如果 'b' 上的方法不是命名的,而是匿名的,并且写在构造函数中如下:
public B ()
{
C.ActionList.Add ( () => {
...
} );
}
【问题讨论】:
标签: c# delegates scope action object-lifetime