【发布时间】:2010-10-08 22:31:04
【问题描述】:
假设我有一个对象 Client,它有一个子 StatusType 对象。两者都实现了 INotifyPropertyChanged。
客户端在检查null并确保值不同后订阅属性中的prop changed事件
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);
}
Client 和 StatusType 都继承自 EntitiesBase,后者负责实现 INotifyPropertyChanged 的实际繁重工作。
所以我的实际问题是,出于内存原因,我是否需要让客户端取消订阅 StatusType.PropertyChanged 事件?如果是这样,我应该使用解构函数,还是让客户端实现 IDisposable?
如果我要使用解构器,它会看起来像这样吗?
~Client()
{
if (_status != null)
{
_status.PropertyChanged -= Status_PropertyChanged;
_status = null;
}
}
提前致谢。在我们的应用程序中,有时我们的内存中可能有超过 1000 个客户端,我想确保我的效率很高。
【问题讨论】: