【发布时间】:2012-01-15 02:11:45
【问题描述】:
class A
{
public event EventHandler AEvent;
}
class B
{
private A _foo;
private int _bar;
public void AttachToAEvent()
{
_foo.AEvent += delegate()
{
...
UseBar(_bar);
...
}
}
}
既然delegate 捕获了变量this._bar,它是否隐含地持有B 的实例? B 的实例是否会通过事件处理程序引用并被A 的实例捕获变量?
如果_bar 是AttachToAEvent 方法的局部变量,会有什么不同吗?
因为在我的例子中,A 的实例比B 的实例寿命更长,而且比B 的实例小得多,我担心这样做会导致“内存泄漏”。
【问题讨论】:
-
属性和任何字段都存在同样的问题。我倾向于不捕获其他可访问的成员。安全起见,并分配给当地人。这样一来,您现在在方法的动态范围之外几乎是不可变的。
标签: c# memory-leaks closures anonymous-methods object-lifetime