說我有一個對象具有子StatusType對象的客戶端。兩者都實現INotifyPropertyChanged。取消訂閱子對象prop更改事件
客戶簽約的道具在屬性檢查空,並確保值後改變事件是不同
public StatusType Status
{
get { return _status ?? (_status = this.GetNewStatusType()); }
set
{
if (!(_status ?? (_status = this.GetNewStatusType())).Equals(value))
{
_status.PropertyChanged -= Status_PropertyChanged;
_status = value;
_status.PropertyChanged += Status_PropertyChanged;
base.OnPropertyChanged("Status");
}
}
}
客戶端偵聽屬性更改事件和氣泡起來。
void Status_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnPropertyChanged("Status." + e.PropertyName);
}
客戶端和StatusType從EntitiesBase,這確實執行INotifyPropertyChanged的實際繁重繼承。
所以我真正的問題是我需要從內存的原因客戶退訂StatusType.PropertyChanged事件?如果是這樣,我應該使用解構器,還是讓客戶端實現IDisposable?
如果我要使用解構器,它會看起來像這樣嗎?
~Client()
{
if (_status != null)
{
_status.PropertyChanged -= Status_PropertyChanged;
_status = null;
}
}
在此先感謝。在我們的應用程序中,有些時候我們可能在內存中擁有超過1000個客戶端,我想確保我的效率。