public void BindEvent(A a)
{
a.X += AEventHandler;
}
我有三个关于这个的问题。
现在如果我将B实例的引用设置为null,它是否真的不会被垃圾回收,因为垃圾回收器认为它仍在使用(从而在内存中保留一个无用且可能干扰的B副本)?
如果我有另一个对象C(属于类C),其中我有对A的引用称为a(“this.a = new A()”)。然后我调用“b.BindEvent(this.a)”,并在C中将对a的引用设置为null(“this.a = null”)。因为通过b中的事件引用了A,所以这样做会使A的副本保留在内存中吗?
如果以上任何一种或两种情况都是正确的,我该如何最好地绕过这些问题?如果我有整个事件处理程序列表(例如10行像“a.SomeEvent += SomeMethod”),我应该清除它们吗(“a.SomeEvent -= SomeMethod”)?在代码的哪个时间或位置应该执行这些操作?
嗯,这有点模糊,但我不确定如何更好地解释。如果需要更详细的说明,请留言。
A
)处于活动状态 - 其次,任何东西都无法看到A
...因此数据是断开的并被收集。 - Marc Gravell