我为化学分析仪器编写了一个序列转换器。我将每一行视为一个对象,将该对象的每个字段视为另一个对象。当一行被添加到列表中时,我需要对一些字段对象进行一些更新,比如订单编号,所以我实现了一个指向该行中每个字段对象的委托(delegate)。当我尝试克隆一个行对象时出现问题,委托(delegate)仍然指向原始对象并且只更新字段成员。我试图取消注册克隆上的监听器并将其注册回来,但它仍然在原始对象上运行代码。我是否应该取消注册所有听众,然后制作克隆并将其注册回原点和克隆?执行此操作的最佳方法是什么?
第二个问题:我尝试使用 Delegate.RemoveAll 函数,但不知道要传递什么。它说目标和方法作为代表。有人用过吗?
最佳答案
使用委托(delegate)使对象有状态而不是无状态。要实现无状态对象,它需要其所有属性都是自包含的,以便克隆操作可以做到这一点,成为克隆而不是原始对象。
由于它是一个有状态对象,因此需要创建一个管理对象(或复制构造函数),它可以巧妙地遍历原始对象并重新创建新对象,而无需原始对象的委托(delegate),而是适当的委托(delegate)自己的。
关于c# - 如何使用内部委托(delegate)克隆对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10242973/