簡體   English   中英

什么時候應該解雇“財產變更”事件?

[英]When should a “property changed” event be fired?

當財產的實際價值沒有變化時觸發“財產已更改”事件是否合適?

public int SomeProperty
{
    get { return this.mSomeProperty; }
    set
    {
        this.mSomeProperty = value;
        OnPropertyChanged(new PropertyChangedEventArgs("SomeProperty"));
    }
}

即使新值與舊值相同,這也會觸發事件。 這是不好的做法嗎?

除非值發生變化,否則最佳做法不是拋出事件。

在你的情況下,屬性只是一個'int',所以它只是一個簡單的相等檢查。 如果您的財產本身就是一個對象,則需要考慮更多案例

  1. 您再次設置相同的實例 - 沒有屬性更改

  2. 您使用不同的值設置不同的實例 - 拋出屬性更改

  3. 您設置了一個不同的但是“相等”的實例(即,兩個不同的對象具有相同的值集,並且從您的應用程序的角度來看可以被認為是等效的) - 拋出屬性更改。

最后一個會受到一些爭論......當所有屬性都相同時,屬性是否真的發生了變化? 如果有人使用該屬性更改來訂閱子類中的更改,則需要它知道取消訂閱舊類並訂閱新類。 因此,我在宣布改變方面犯了錯誤。

不,除非基礎值實際發生變化,否則不要觸發事件。

通常,您對Setter進行編碼,使得它甚至不會嘗試修改基礎值,除非它實際上是不同的。

如果你有一個名為PropertySetterAccessed的事件,那么當值沒有改變時觸發它是合適的。 但是,您的事件稱為PropertyChanged ,因此只有在實際發生時才會觸發它。 如果您的活動/方法/課程等沒有做“他們在錫上說的話”,那么您正在為某人制造維護噩夢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM