2

我为化学分析仪器编写了一个序列转换器。我将每一行视为一个对象,将该对象的每个字段视为另一个对象。当将一行添加到列表中时,我需要对某些字段对象(例如订单编号)进行一些更新,因此我实现了一个委托,该委托指向该行中的每个字段对象。当我尝试克隆行对象时会出现问题,委托仍指向原始对象并仅更新字段成员。我试图取消注册克隆上的侦听器并将其注册回来,但它仍然在源对象上运行代码。我是否应该取消注册所有侦听器,然后进行克隆并将其注册回原点和克隆?做这个的最好方式是什么?

第二个问题:我尝试使用 Delegate.RemoveAll 函数,但不知道要传递什么。它说目标和方法作为代表。有人用过吗?

4

1 回答 1

0

使用委托使对象有状态而不是无状态。为了实现无状态对象,它需要它的所有属性都是自包含的,这样克隆操作就可以做到这一点,是一个克隆而不是原始对象。

由于它是一个有状态的对象,因此需要创建一个管理对象(或复制构造函数),它可以巧妙地遍历原始对象并重新创建新对象,而无需原始对象的委托,而是它自己的正确委托。

于 2012-04-20T13:07:30.127 回答