[C#] 事件處理程序是否停止發生垃圾回收?


Answers

當一段內存不再被引用時,它成為垃圾收集的候選對象。 當你的類的實例超出範圍時,它不再被你的程序引用。 它不再使用,因此可以安全地收集。

如果你不確定會收集到什麼,請問你自己以下的問題:是否仍然存在對它的引用? 事件處理程序由對象實例引用,而不是相反。

Question

如果我有以下代碼:

MyClass pClass = new MyClass();
pClass.MyEvent += MyFunction;
pClass = null;

pClass會被垃圾收集嗎? 或者它會在它發生的時候繼續發射它的事件嗎? 為了允許垃圾收集,我需要執行以下操作嗎?

MyClass pClass = new MyClass();
pClass.MyEvent += MyFunction;
pClass.MyEvent -= MyFunction;
pClass = null;



pClass將被垃圾收集。 但是,如果上面的代碼片段位於另一個類中,那麼如果不將pClass設置為null ,則該類的實例可能不會被清除。




Links