Jar*_*rgo 0 .net c# garbage-collection
我有关于.net垃圾收集的简单问题.在下面的代码中,我在子对象的构造函数中创建一个侦听器类实例.我的问题是侦听器类是否被子集或主对象之前的垃圾收集器收集,因为在任何地方都没有直接引用它?
class MainObject
{
public void DoSomething()
{
}
}
delegate void someEventHandler();
class ChildObject
{
public event someEventHandler SomeEvent;
MainObject main;
public ChildObject(MainObject main)
{
this.main = main;
new Listener(this, main);
}
}
class Listener
{
MainObject main;
public Listener(ChildObject child, MainObject main)
{
this.main = main;
child.SomeEvent += new someEventHandler(child_SomeEvent);
}
void child_SomeEvent()
{
main.DoSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
这里是一个参考吧,在调用列表child.SomeEvent.
悬挂事件处理程序是.NET应用程序中内存泄漏的首要原因.
收集child对象后将收集它,但是如果您希望在收集对象之前收集它,则需要将其从调用列表中删除(通过使用-=运算符).