【发布时间】:2013-05-02 03:52:53
【问题描述】:
(使用 VS2010。假设性能不是问题)。
我有一个特定的对象,它为其所有属性更改实现事件。有时需要将对象“重置”为其所有默认属性值。最简单的方法就是构造一个新对象:
Object1= New MyObject
但是,对于原始对象的任何事件订阅者,这等价于更改所有属性值。例如,如果订阅者只监听属性A 的更新,那么它现在还必须意识到新对象构造的可能性。这似乎为订阅者增加了额外的努力。 (例如,也许我必须创建一个“NewObjectAssigned”事件,并且属性更改的订阅者也需要处理它。)
所以我想用 Reset 方法装备对象,所以上面的代码更改为:
Object1.Reset
这样 Object1 引用永远不会改变,Reset 会手动将所有属性更改为默认值,从而触发所有 propertychanged 事件。但这也感觉不太对劲,与仅仅声明一个新对象相比也很麻烦。我想我需要一种方法来手动重置所有属性或引发所有更改的事件,这让我很恼火——我必须记住在向类中添加新属性时更新此方法。或者也许这并没有我想象的那么成问题。
这是一个足够简单的场景,我确信有一个最佳实践,无论是哪种方式。哪个更可取?
【问题讨论】:
-
您必须定义一些标准来判断哪个提案是“优选的”。一种选择是使用包装类来包装另一个类(包含属性)并简单地重新实例化它以重置为默认值。与适配器模式类似,适配器随后将提供事件并传递对实现类属性的访问。
-
那么对于包装器类,当内部类被重新实例化时,包装器是否必须为了外部订阅者而引发每个属性更改事件?
-
是的,通常它的包装不会引发事件,包装器会——所以,应该是相同数量的工作。
标签: c# events default-value