【发布时间】:2012-08-29 02:10:13
【问题描述】:
我正在寻找一种方法来克隆在编译时(或运行时,我认为)未知的对象。问题的确切措辞是“编写一个可以克隆任意对象的函数”例如
- 将未知对象传递给函数。
- 返回对象的深层副本。
我猜我需要使用反射来读取函数和变量,然后是一些如何创建一个新对象并将这些值分配给它的方法。我可以只使用 Type.GetType() 来查找类型并创建一个新实例,然后使用这个 known 对象的复制构造函数。但是我不确定给定的类是否会实现(深度),或者问题是否要求这样的解决方案(我不明白所需的结果是什么,这无济于事!)。
有人可以指导我朝着正确的方向前进吗?需要类/接口和伪代码(如果您觉得大方的话)来实现这一目标?
【问题讨论】:
-
你可以序列化和反序列化回来。
-
@L.B 是的,但是大多数序列化程序都有先决条件和限制;它们不需要扩展到任意对象。
-
这是个好主意,你可能有一个像
where T : ISerializable这样限制的泛型方法,只是为了确保你不会有问题 -
@AndreCalil 不会解决它,因为这只是将条件放在根对象上 - 它不能保证更大图的任何事情。另外:大多数可序列化类型不应实现
ISerializable
标签: c# reflection clone