IEditableObject和IRevertibleChangeTracking有什么区别?

时间:2010-06-03 14:41:06

标签: c# .net vb.net system.componentmodel componentmodel

IEditableObjectIRevertibleChangeTracking之间有什么区别(两者都来自System.ComponentModel命名空间)?看起来第一个支持显式事务,而第二个支持更隐式 - 但最终结果是相同的。我应该如何在代码中实现它?目前我在BeginEdit中没有执行任何操作,并分别在RejectChangesAcceptChanges中致电EndEditCancelEdit。我的问题是,这也将接受在B​​eginEdit之前所做的更改。

这真的是微软想要的,还是我试图实现两个互斥的接口?

2 个答案:

答案 0 :(得分:25)

这两个接口不是互斥的。它们仅用于支持不同但有些相关的场景,它们也可能由同一个给定的类实现。这是一个快速解释:

IEditableObject Interface

IEditableObject界面旨在支持对象在编辑时以某种特定方式管理其内部状态的场景

因此,界面包含明确标记编辑阶段何时开始,完成或中止的方法,以便可以采取适当的操作来修改对象在这些阶段的状态。


IRevertibleChangeTracking接口

IRevertibleChangeTracking接口旨在支持对象需要回滚到其先前状态的场景。

接口有一些方法可以标记何时应该使对象的当前状态成为永久状态,或者应该将其恢复为上一个已知的永久状态。

答案 1 :(得分:1)

IEditableObject 用于短期可恢复的修改,例如对话框。

IRevertibleChangeTracking 用于长期可恢复的更改,例如编辑记录和跟踪是否需要保存记录。

我经常实现这两个接口,以便我能够支持两个级别的撤销。