【发布时间】:2013-06-15 01:19:48
【问题描述】:
我需要“复制”一个对象。我尝试使用 IClonable 接口,但无济于事,对我来说最明智的解决方案是使用不安全代码创建指向对象的指针,然后在 C 中编写类似 Memcpy 的方法。唯一的问题是创建指向托管类型的指针.我假设这样做会给垃圾收集器带来问题,但是如果可以使用封送处理或其他东西来创建指向托管对象的指针,那么我可以在 C 中编写一个类似 memcpy 的函数,然后复制我的对象。如果结构可以不受管理,那么为什么对象不能呢?一个对象本质上是一个结构指针,所以理论上它应该等于 IntPtr 的大小,对吧?
【问题讨论】:
-
您要复制的对象是什么?你是如何实现
IClonable.Clone方法的?您是否调用您的Clone()方法?您是否尝试将 C# 对象复制/传递给 C 程序? -
是的,我当然做到了。我的对象包含一个未克隆的 List 对象(我认为这与 IClonable 接口仅提供浅克隆方法有关。)
-
那些想法很糟糕。只需创建一个复制构造函数或实现
IClonable,无论哪种方式都无所谓。您必须编写一个方法,将新对象中的每个值设置为旧对象中的值。 -
@user1454902 所有
ICloneable所做的只是让您实现Clone()方法。将其实现为浅克隆还是深度克隆取决于您。我认为,如果您发布尝试的代码并描述它到底是如何不起作用的,这将有所帮助。 -
让我们看看你的代码是否可以克隆?