C# 接口的扩展方法

C# 接口的扩展方法,c#,wpf,C#,Wpf,我目前正在使用WPF并实现一个与模型相关的类,该类派生INotifyPropertyChanged。我发现声明一些助手方法非常有用。所以我想自动添加这些助手方法: public static class INotifyPropertyChangedHelper { static void notifyPropertyChanged(this INotifyPropertyChanged propertyChanged, string PropertyName = "") {

我目前正在使用WPF并实现一个与模型相关的类,该类派生
INotifyPropertyChanged
。我发现声明一些助手方法非常有用。所以我想自动添加这些助手方法:

public static class INotifyPropertyChangedHelper
{
    static void notifyPropertyChanged(this INotifyPropertyChanged propertyChanged, string PropertyName = "")
    {
        // errors here
        propertyChanged.PropertyChanged(propertyChanged, new PropertyChangedEventArgs(PropertyName));
    }
    static bool setField<T>(this INotifyPropertyChanged propertyChanged, ref T field, T value, [CallerMemberName]string propertyName = "")
    {
        if (EqualityComparer<T>.Default.Equals(field, value)) return false;
        field = value;
        propertyChanged.notifyPropertyChanged(propertyName);
        return true;
    }
}
公共静态类INotifyPropertyChangedHelper
{
静态void notifyPropertyChanged(此INotifyPropertyChanged propertyChanged,字符串PropertyName=“”)
{
//这里的错误
propertyChanged.propertyChanged(propertyChanged,new PropertyChangedEventArgs(PropertyName));
}
静态布尔设置字段(此INotifyPropertyChanged propertyChanged,ref T字段,T值,[CallerMemberName]字符串propertyName=”“)
{
if(EqualityComparer.Default.Equals(字段,值))返回false;
字段=值;
propertyChanged.notifyPropertyChanged(propertyName);
返回true;
}
}
给我一个编译器错误

事件“System.ComponentModel.INotifyPropertyChanged.PropertyChanged”只能 出现在+=或-=”的左侧,因为PropertyChanged是一个事件


有一种优雅的方法可以解决这个问题吗?

这不是一个简单的技巧,扩展方法是编译器识别的静态方法,它们不会成为类本身的一部分。因为+=和-=on event只能从定义事件的类中访问,所以扩展方法在这方面帮不了你

我猜您正在尝试破解一个已知的问题:

也许这会有帮助:这个答案可能会对您有所帮助: