同一 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,并在恐惧和绝望中放弃了。

我认为只要定期实现接口就可以了。