2016-06-25 113 views
0

我看到一个可观察队列类here的实现。我发现了两件事我不明白: 1.事件,名称PropertyChanged和CollectionChanged已经在基类中定义。为什么你不必使用'新'?类层次结构中的事件

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; } 
} 

回答

1

我看不到在定义PropertyChangedCollectionChanged的基类中的哪个位置。在我看来,这些可以在没有new关键字的ObservableStack<T>中定义。

而且,INotifyPropertyChanged.PropertyChanged事件的实现正在明确完成,所以它必须使用事件访问器语法,即addremove

+0

只是再看看答案,你是对的。认为基类是ObservableCollection。谢谢! – R3turnz

-1

这是对事件的惯例,事件仅仅是在代表一个包装,所以当你定义一个事件你指定什么样的代表将注册此事件,然后你可以添加或删除代表注册这个事件。