c# - 如何使用内部委托(delegate)克隆对象

标签 c# visual-studio-2010 .net-4.0

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

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

最佳答案

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

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

关于c# - 如何使用内部委托(delegate)克隆对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10242973/

相关文章:

c# - 如何在 VS2010 的测试结果窗口中查看单元测试的输出?

c# - 如何暂时停止优化WPF框架元素?

c# - .Net TPL : Limited Concurrency Level Task scheduler with task priority?

c# - sqlite "Data source cannot be empty"

c# - 从单独文件夹中的类访问项目文件

c - 在 VS 2010 express C++ 程序结束后,我怎样才能使带有输出的控制台不会消失

c# - 如何通过反射执行带有可选参数的私有(private)静态方法?

c# - 是否可以使用swagger codegen生成.Net4.0的客户端?

c# - StreamWriter 没有响应

c# - 在 C# 中安全地生成 SQL 查询