同一 class 中的同名虚拟和普通事件
virtual and normal event of the same name in the same class
我不是一个绝对的初学者,但这个似乎超出了我的范围(或者也许我在一天结束时精力不足:))。以下代码片段试图实现什么(摘自 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
事件的存在不满意。在仍然正确实现接口的情况下需要删除哪一个?
在 VB 中有两种方法可以做到这一点。首先,也是最简单的,就是摆脱 INotifyPropertyChanged
的显式实现。制作受保护的事件 public,不要将显式事件与 add
/remove
块一起使用。
然而,碰巧 ObservableCollection<T>
自己明确地实现了 INotifyPropertyChanged
,所以这样做可能有一些很好的理由。通常我会做框架做的任何事情,因为从历史上看,他们的想法平均而言比我的要好。在这种情况下,我不知道他们为什么那样做,但在最坏的情况下也不会造成伤害。
结果 you can implement interfaces explicitly in VB.NET. In theory. But I tried doing something based on this Lovecraftian example code here,并在恐惧和绝望中放弃了。
我认为只要定期实现接口就可以了。
我不是一个绝对的初学者,但这个似乎超出了我的范围(或者也许我在一天结束时精力不足:))。以下代码片段试图实现什么(摘自 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
事件的存在不满意。在仍然正确实现接口的情况下需要删除哪一个?
在 VB 中有两种方法可以做到这一点。首先,也是最简单的,就是摆脱 INotifyPropertyChanged
的显式实现。制作受保护的事件 public,不要将显式事件与 add
/remove
块一起使用。
然而,碰巧 ObservableCollection<T>
自己明确地实现了 INotifyPropertyChanged
,所以这样做可能有一些很好的理由。通常我会做框架做的任何事情,因为从历史上看,他们的想法平均而言比我的要好。在这种情况下,我不知道他们为什么那样做,但在最坏的情况下也不会造成伤害。
结果 you can implement interfaces explicitly in VB.NET. In theory. But I tried doing something based on this Lovecraftian example code here,并在恐惧和绝望中放弃了。
我认为只要定期实现接口就可以了。