对象重置方法或事件订阅者的新参考?

时间:2013-03-27 16:30:33

标签: c# events default-value

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

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

Object1= New MyObject

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

所以相反我想用一个Reset方法装配对象,所以上面的代码改为:

Object1.Reset

这样Object1引用永远不会改变,Reset会手动将所有属性更改为默认值,从而触发所有propertychanged事件。但是,与仅声明一个新对象相比,这也感觉不太正确,而且很麻烦。我想我需要一个手动重置所有属性或引发所有已更改事件的方法 - 我必须记住每当将新属性添加到类时更新此方法。或者这可能不像我正在做的那样有问题。

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

2 个答案:

答案 0 :(得分:1)

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

来自MSDN:

  

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

答案 1 :(得分:0)

我认为我同意Peter Ritchie的第一条评论,即我原来的问题缺乏确定“优选”方法所必需的细节。按照目前的情况,我可能会提出一个包装类的建议,它将负责处理新的对象引用并向订阅者公开事件。