.net C#垃圾收集问题

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)

Ode*_*ded 6

这里一个参考吧,在调用列表child.SomeEvent.

悬挂事件处理程序是.NET应用程序中内存泄漏的首要原因.

收集child对象后将收集它,但是如果您希望在收集对象之前收集它,则需要将其从调用列表中删除(通过使用-=运算符).