以下哪一项是更正确的INotifyPropertyChanged实现?

sta*_*ica 1 c# inotifypropertychanged

我经常想知道:INotifyPropertyChanged对于任何属性,以下哪两种实现Foo更好,甚至更正确?

/* version A: */                      |     /* version B: */
private bool foo;                     |     private bool foo;
public bool Foo                       |     public bool Foo
{                                     |     {
   set                                |        set
   {                                  |        {
                                      |           if (value != foo)
                                      |           {
      foo = value;                    |              foo = value;
      OnPropertyChanged("Foo");       |              OnPropertyChanged("Foo");
                                      |           }
    }                                 |        }
}                                     |     }
Run Code Online (Sandbox Code Playgroud)

(我省略了与此问题无关的所有内容.)

我怀疑它应该是右边的版本B,因为它可以防止触发不必要的事件.但是,是否存在这些相同的错过事件可能导致问题的情况?

Dar*_*rov 5

版本B看起来更正确,因为如果属性实际上没有更改值,它不会引发事件.版本A不会有任何问题,它只是一个不必要的调用,不会更新任何UI.

正如文件所述:

通知客户端属性值已更改.

  • @stakx,我想不出这样的情况.该接口称为INotifyPropertyChanged而不是INotifyPropertyValueWasWritten,因此订阅者应该只在值实际更改时才会收到通知. (3认同)