同一类中具有相同名称的虚拟事件和正常事件

本文关键字:事件 虚拟 常事件 一类 | 更新日期: 2023-09-27 18:08:13

我不是一个绝对的初学者,但这似乎超出了我的能力(或者可能我在一天结束的时候没有精力:))。下面的代码片段试图实现什么(取自这篇文章)?

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的显式实现。将受保护的事件设置为公共事件,不要对add/remove块使用显式事件。

然而,碰巧ObservableCollection<T>显式地实现了INotifyPropertyChanged,所以这样做可能有一些很好的理由。一般来说,框架做什么我就做什么,因为从历史上看,他们的想法通常比我的好。在这种情况下,我不知道他们为什么那样做,但在最坏的情况下,它不会伤害。

事实证明你可以在VB.NET中显式地实现接口。理论上是这样。但是我试着根据这里的lovecraft示例代码做一些事情,并在恐惧和绝望中放弃了。

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