2012-04-20 63 views
2

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

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

+4

最好的主意:尽量避免代表在这里。 – 2012-04-20 08:50:16

+0

这听起来像你需要一个DataTable对象? – 2012-04-20 12:59:25

回答

0

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

既然是有状态的对象,人们将需要创建一个管理对象(或拷贝构造函数),它可以巧妙地穿越原始和重建没有原始的代表的新对象,但适当的者自身