同一个类中同名的虚拟和普通事件

时间:2016-09-21 16:47:11

标签: c# vb.net events inotifypropertychanged

我不是一个绝对的初学者,但这个似乎超出了我(或者在这一天结束时我可能没精力:))。以下代码片段试图实现什么(取自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事件的存在似乎并不满意。在仍然正确实现界面的同时需要删除哪一个?

1 个答案:

答案 0 :(得分:0)

在VB中有两种方法可以做到这一点。首先,最简单的是摆脱INotifyPropertyChanged的显式实现。将受保护的事件设为公开,不要将明确的事件与add / remove块一起使用。

然而,ObservableCollection<T>明确地实现了INotifyPropertyChanged,所以可能有一些很好的理由这样做。通常我会做任何框架所做的事情,因为从历史上看,他们的想法平均比我的好。在这种情况下,我不知道为什么他们这样做,但在最坏的情况下它不会受到伤害。

事实证明you can implement interfaces explicitly in VB.NET。理论上。但是我尝试做了based on this Lovecraftian example code here的事情,并且恐惧和绝望地放弃了。

我认为你定期实施界面会很好。