我有以下代码,其中包含'PropertyChangedEventHandler'。我看到它有一个属性PropertyChangedEventHandler,但我没有看到它调用'new PropertyChangedEventHandler'的任何地方?当我不需要它时,我是否需要“取消”引用?
public abstract class MyClass: INotifyPropertyChanged
{
public event PropertyChangedEventHandler eventHandler;
}
答案 0 :(得分:3)
当您声明一个事件时,编译器会自动创建目标委托类型的后备字段和两个名为“add”和“remove”的包装器方法。订阅事件时,内部调用“add”方法,如果尚未创建,则会创建底层委托的实例(本例中为PropertyChangedEventHandler)。
取消订阅活动时,会在内部调用“删除”方法。如果没有更多订阅者,则在“remove”方法中,底层委托字段将自动设置为null。因此,您无需显式将其设置为null。
这就是你需要在引发事件之前检查空引用的原因,因为如果没有订阅者,则基础字段将为null。
答案 1 :(得分:1)
这被声明为event
。默认情况下,事件会自动创建为可以添加和删除委托的多播委托。
所以不,你不需要做任何事情。框架将初始化它并在适当时释放它。