对象重置方法或事件订阅者的新引用

本文关键字:新引用 引用 方法 事件 对象 | 更新日期: 2023-09-27 18:06:03

(使用VS2010。假设性能不是问题)。

我有一个特定的对象,它实现了所有属性更改的事件。有时需要将对象"重置"为其所有默认属性值。最简单的方法就是构造一个新对象:

Object1= New MyObject

但是,对于原始对象的任何事件订阅者,这相当于更改所有属性值。例如,如果订阅者只监听属性A的更新,那么现在它还必须意识到新对象构造的可能性。这似乎给订阅者增加了额外的工作量。(例如,也许我必须创建一个"NewObjectAssigned"事件,并且属性更改的订阅者也需要处理该事件。)

因此,我考虑用Reset方法为对象配置,因此上面的代码更改为:

Object1.Reset

这样Object1引用永远不会改变,并且Reset将手动将所有属性更改为默认值,从而触发所有propertychanged事件。但这感觉也不太对,与仅仅声明一个新对象相比也很麻烦。我想需要一个方法来手动重置所有属性或引发所有更改的事件,这让我很恼火——每当向类添加新属性时,我必须记得更新这个方法。或许这并不像我说的那么成问题。

这是一个足够简单的场景,我相信有一个最佳实践,这样或那样的方式。哪个更可取?

对象重置方法或事件订阅者的新引用

如果您需要事件处理程序保持连接,那么您将希望使用重置而不是创建新实例。如果你的对象实现了INotifyPropertyChanged,那么你可以发送一个事件来重置PropertyName设置为null。

从MSDN:

propertyName参数的空值或null表示所有属性都已更改。

我认为我同意Peter Ritchie的第一个评论,即我最初的问题缺乏确定"优选"方法所需的细节。就目前而言,我可能会采用他建议的包装器类,它将负责处理新的对象引用并向订阅者公开事件。