【问题标题】:extension method to interface接口的扩展方法
【发布时间】:2014-04-15 05:29:04
【问题描述】:

我目前正在使用 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;
    }
}

给我一​​个编译器错误

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

有没有优雅的方法来解决这个问题?

【问题讨论】:

标签: c# wpf


【解决方案1】:

做到这一点并不容易,扩展方法是编译器识别的静态方法,不会成为类本身的一部分。由于 += 和 -= on event 只能通过定义事件的表单类访问,因此扩展方法无法帮助您。

我猜您正在尝试破解已知问题之一: Implementing INotifyPropertyChanged - does a better way exist?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    相关资源
    最近更新 更多