我看到的是Implementing INotifyPropertyChanged - does a better way exist?(具体来说是公认的答案),这对于不需要或不使用基类的任何情况都很有效.然而,我想使用另一个接口来实现它,利用显式实现(https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/interfaces/explicit-interface-implementation),以便允许实现类从其他基类继承而不修改所述基类.
我试着做了一些大致如下的事情:
public interface INotifyPropertyChangedWithHelper : INotifyPropertyChanged
{
void SetProperty<T>(T value, ref T property, string propertyName)
{
if (!EqualityComparer<T>.Default.Equals(property, value))
{
property = value;
OnPropertyChanged(propertyName);
}
}
void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
但最后一行抛出错误CS0079(事件‘INotifyPropertyChanged.PropertyChanged
’只能出现在+=
或-=
的左侧).我之所以假设这一点,是因为除了实现它的类之外,不能从任何地方调用PropertyChanged
,但是有什么方法可以解决这个问题吗?
如果答案是"不,您必须使用基类",那很好,但我希望以一种不妨碍使用其他基类的方式来工作.