类层次结构中的事件
本文关键字:事件 层次结构 | 更新日期: 2023-09-27 17:51:19
我在这里看到了一个可观察队列类的实现。我发现有两件事我不明白:1. 事件,名称为PropertyChanged和CollectionChanged的事件已经在基类中定义。为什么不用new呢?
public virtual event NotifyCollectionChangedEventHandler CollectionChanged;
2。PropertyChanged事件的声明方式与属性类似。你为什么这么做?
protected virtual event PropertyChangedEventHandler PropertyChanged;
event PropertyChangedEventHandler INotifyPropertyChanged.PropertyChanged
{
add { this.PropertyChanged += value; }
remove { this.PropertyChanged -= value; }
}
我看不到在基类中定义PropertyChanged
和CollectionChanged
的地方。在我看来,这些可以在ObservableStack<T>
中定义,而不需要new
关键字。
另外,INotifyPropertyChanged.PropertyChanged
事件的实现是显式完成的,所以它必须使用事件访问器语法,即add
和remove
。
这是事件的约定,事件仅仅是委托的包装,所以当你定义一个事件时,你指定什么样的委托将为这个事件注册,然后你可以添加或删除这个事件的委托注册。