【发布时间】:2017-01-30 00:55:45
【问题描述】:
我不是一个绝对的初学者,但这个似乎超出了我的能力(或者我可能在一天结束时没有精力了 :))。以下代码片段试图实现什么(取自this SO post)?
public class ObservableStack<T> : Stack<T>, INotifyCollectionChanged, INotifyPropertyChanged
{
//...
protected virtual event PropertyChangedEventHandler PropertyChanged;
//...
event PropertyChangedEventHandler INotifyPropertyChanged.PropertyChanged
{
add { this.PropertyChanged += value; }
remove { this.PropertyChanged -= value; }
}
}
我需要将其转换为 VB.NET,它似乎对存在两个 PropertyChanged 事件并不满意。在正确实现接口的同时还需要删除哪一个?
【问题讨论】:
-
第二个是同一界面的an explicit implementation。例如,当您同时实现
IEnumerable<T>和System.Collections.IEnumerable时,您会这样做。您可以使用两种不同的返回类型覆盖GetEnumerator()两次,其中一种是显式的。那将是不可能的。显式事物允许编译器区分对两种不同方法的调用。我很好奇那个人为什么会在那里。 -
@EdPlunkett:但是查看类声明,唯一需要
PropertyChanged的接口是INotifyPropertyChanged。那我们为什么需要覆盖两次呢? -
我希望比我聪明的人能回答这个问题。
-
我刚刚发现
ObservableCollection<T>以同样的方式(但不是虚拟的)。我不知道。 “框架会做什么?”是 IMO 的有效原则。 -
哦,对了,真正的问题,哈哈!很简单,有两种方法:要么公开受保护的事件并删除显式事件,要么保持显式,如下所示:stackoverflow.com/questions/1577149/…
标签: c# vb.net events inotifypropertychanged