IEditableObject和IRevertibleChangeTracking有什么区别?

ope*_*lar 24 .net c# vb.net system.componentmodel componentmodel

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

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

Enr*_*lio 26

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

IEditableObject接口

IEditableObject接口被设计为支持其中一个对象需要的情况下以某种特定的方式管理其内部状态,同时正在编辑它.

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


IRevertibleChangeTracking界面

IRevertibleChangeTracking接口被设计为支持其中一个对象需要能够场景回滚到以前的状态.

该接口具有一些方法,用于标记何时应将对象的当前状态设为永久状态,或者应将其恢复为上一个已知的永久状态.

  • ADO.NET中的一些核心类是有趣的例子.System.Data.DataRow类公开AcceptChanges/RejectChanges和BeginEdit/CancelEdit/EndEdit方法(尽管没有实现任何上述接口).BeginEdit方法将行置于事件和验证暂停的状态,直到调用CancelEdit或EndEdit.除此之外,CancelEdit还调用RejectChanges,它通过将行恢复为先前的值来撤消所有修改.EndEdit调用AcceptChanges,它会用当前值覆盖以前的值. (4认同)
  • +1:您是否了解有关这些接口的任何已知实现的任何详细信息或任何建议的使用方法?MSDN在这里非常不完整,谷歌不会返回更多. (2认同)