我看到了一个可观察队列类here的实现。我找到了两件我不理解的东西: 1.具有名称PropertyChanged和CollectionChanged的事件已在基类中定义。为什么你不必使用'new'?
public virtual event NotifyCollectionChangedEventHandler CollectionChanged;
2。 PropertyChanged事件以simelar方式声明为属性。你为什么这样做?
protected virtual event PropertyChangedEventHandler PropertyChanged;
event PropertyChangedEventHandler INotifyPropertyChanged.PropertyChanged
{
add { this.PropertyChanged += value; }
remove { this.PropertyChanged -= value; }
}
答案 0 :(得分:1)
我无法看到基类中定义PropertyChanged
和CollectionChanged
的位置。在我看来,这些可以在ObservableStack<T>
中使用new
关键字进行定义。
此外,INotifyPropertyChanged.PropertyChanged
事件的实现正在明确完成,因此必须使用事件访问器语法,即add
和remove
。
答案 1 :(得分:-1)
这是事件的约定,事件只是代理的包装,因此当您定义事件时,您指定将为此事件注册哪种代理,然后您可以添加或删除委托注册此事件。