(使用VS2010。假设性能不是问题)。
我有一个特定的对象,它实现了所有属性更改的事件。有时需要将对象“重置”为其所有默认属性值。最简单的方法是构造一个新对象:
Object1= New MyObject
但是,对于原始对象的任何事件订阅者,这相当于更改所有属性值。例如,如果订阅者仅侦听属性A
的更新,那么现在它还必须知道新对象构造的可能性。这似乎为订阅者增加了额外的努力。 (例如,也许我必须创建一个“NewObjectAssigned”事件,并且属性更改的订阅者也需要处理它。)
所以相反我想用一个Reset方法装配对象,所以上面的代码改为:
Object1.Reset
这样Object1引用永远不会改变,Reset
会手动将所有属性更改为默认值,从而触发所有propertychanged事件。但是,与仅声明一个新对象相比,这也感觉不太正确,而且很麻烦。我想我需要一个手动重置所有属性或引发所有已更改事件的方法 - 我必须记住每当将新属性添加到类时更新此方法。或者这可能不像我正在做的那样有问题。
这是一个足够简单的场景,我确信这种方式有这样或那样的最佳实践。哪个更好?
答案 0 :(得分:1)
如果您需要事件处理程序保持连接,那么您将需要使用重置而不是创建新实例。如果您的对象实现了INotifyPropertyChanged
,那么您可以发送单个事件进行重置,并将PropertyName
设置为null。
来自MSDN:
propertyName参数的空值或null表示所有属性都已更改。
答案 1 :(得分:0)
我认为我同意Peter Ritchie的第一条评论,即我原来的问题缺乏确定“优选”方法所必需的细节。按照目前的情况,我可能会提出一个包装类的建议,它将负责处理新的对象引用并向订阅者公开事件。