2

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

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

Object1= New MyObject

但是,对于原始对象的任何事件订阅者来说,这等价于更改所有属性值。例如,如果订阅者只监听属性的更新A,那么现在它也必须意识到新对象构造的可能性。这似乎为订阅者增加了额外的努力。(例如,也许我必须创建一个“NewObjectAssigned”事件,并且属性更改的订阅者也需要处理它。)

因此,我正在考虑使用 Reset 方法来装备对象,因此上面的代码更改为:

Object1.Reset

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

这是一个足够简单的场景,我确信有一个最佳实践,无论是哪种方式。哪个更可取?

4

2 回答 2

1

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

来自 MSDN:

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

于 2013-03-27T16:40:42.263 回答
0

我想我同意彼得里奇的第一条评论,即我最初的问题缺乏确定“首选”方法所需的细节。就目前而言,我可能会接受他关于包装类的建议,该类将负责处理新的对象引用并将事件公开给订阅者。

于 2013-05-01T19:52:53.053 回答