注册到事件的对象的垃圾收集

本文关键字:对象 事件 注册 | 更新日期: 2023-09-27 18:17:17

我有一个视图对象,它初始化另一个对象creditCard object,并注册到creditCard引发的事件。如果视图对象没有对它的引用。垃圾会被收集吗?还是我必须取消订阅才能实现?

注册到事件的对象的垃圾收集

您需要取消对垃圾收集对象的订阅。

"原因很容易解释:当订阅事件处理程序时,事件的发布者通过事件处理程序委托(假设委托是实例方法)持有对订阅者的引用。" - https://stackoverflow.com/a/4526840/283787

当您的creditCard对象订阅事件时,它将引用您的视图对象。例如,creditCard.Event += MyEvent...,这相当于creditCard.Event += this.MyEvent...,其中this将引用view对象,因此您必须取消订阅,以便被垃圾收集。