类层次结构中的事件

本文关键字:事件 层次结构 | 更新日期: 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; }
 }

类层次结构中的事件

我看不到在基类中定义PropertyChangedCollectionChanged的地方。在我看来,这些可以在ObservableStack<T>中定义,而不需要new关键字。

另外,INotifyPropertyChanged.PropertyChanged事件的实现是显式完成的,所以它必须使用事件访问器语法,即addremove

这是事件的约定,事件仅仅是委托的包装,所以当你定义一个事件时,你指定什么样的委托将为这个事件注册,然后你可以添加或删除这个事件的委托注册。