在实现INotifyPropertyChanged时,C#中的[NotifyPropertyChangedInvocator]是什么?

我看到两种类型的INotifyPropertyChanged的实现

>第一个:

public abstract class ViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

>第二个:

public abstract class ViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    [NotifyPropertyChangedInvocator]
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

在第二个你看到有一个额外的属性[NotifyPropertyChangedInvocator] OnPropertyChanged方法

在我的情况下,两个行为都是一样的,但是什么,为什么以及何时使用这个[NotifyPropertyChangedInvocator],这有什么好处?我在互联网上搜索,但找不到任何好的答案。

它是一个Resharper属性从他们的Annotations – 旨在给你警告,然后你的代码看起来可疑:)
考虑这个:

public class Foo : INotifyPropertyChanged 
{
     public event PropertyChangedEventHandler PropertyChanged;

     [NotifyPropertyChangedInvocator]
     protected virtual void NotifyChanged(string propertyName) { ... }

     private string _name;
     public string Name {
       get { return _name; }
       set { 
             _name = value; 
             NotifyChanged("LastName");//<-- warning here
           } 
     }
   }

在NotifyChanged方法上使用[NotifyPropertyChangedInvocator]属性Resharper将给您一个警告,您正在使用(大概)错误的值调用该方法。

因为Resharper现在知道应该调用该方法来进行更改通知,它将帮助您将普通属性转换为具有更改通知的属性:

将其转换为:

public string Name
{
  get { return _name; }
  set
  {
    if (value == _name) return;
    _name = value;
    NotifyChange("Name");
  }
}

此示例来自于此处找到的[NotifyPropertyChangedInvocator]属性的文档:

http://stackoverflow.com/questions/23213146/what-is-notifypropertychangedinvocator-in-c-sharp-when-implements-inotifyprope

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:在实现INotifyPropertyChanged时,C#中的[NotifyPropertyChangedInvocator]是什么?