C#里面有类似Java里的Clone方法吗??如果有的话能实现深度Copy吗??
C#里面有类似Java里的Clone方法吗??如果有的话能实现深度Copy吗?? 问题点数:50、回复次数:11Top
1 楼exboy(kuku)回复于 2004-12-03 14:58:12 得分 0
C#里面个 ICloneable 接口,此接口只有一个方法 Clone, 一般要实现克隆的类都实现此接口。
可以实现深度 Copy 。Top
2 楼TonyJoule(寒星㊣)回复于 2004-12-03 15:02:40 得分 0
当然有。楼上已经说了。不过深度Copy需要自己写代码的。Top
3 楼SAsura(爱我别走)回复于 2004-12-03 15:18:49 得分 10
试试先序列化,在反序列化Top
4 楼jimh(Jimmy)回复于 2004-12-03 15:37:21 得分 0
如果是自定义类,需要自己写代码Top
5 楼nga96(因为我笨,所以努力。陈勇华)回复于 2004-12-03 18:35:41 得分 0
i do not knowTop
6 楼linzsoft(邪邪)回复于 2004-12-03 18:44:54 得分 0
有,但深度的要自己写Top
7 楼smcdl(大土豆)回复于 2004-12-06 21:51:28 得分 0
怎么有人说可以深度copy,有人说不可以,到底谁对呢??Top
8 楼smcdl(大土豆)回复于 2004-12-07 10:40:40 得分 0
顶,请高人回答Top
9 楼OneDotRed(武装到眼神)回复于 2004-12-07 12:07:16 得分 30
继承ICloneable接口的类只能实现浅度Clone,如果类中有子类,其他引用类型等,clone就不完全。
要实现深度克隆,可以这样考虑:
首先使类支持Serealizable,然后利用BinaryFormatter将实例本事序列化为byte[]或stream,再反序列化为该类型的实例。
------------------
CodeProject上好像有篇文章,由于太慢了,所以没去搜索了:)Top
10 楼OneDotRed(武装到眼神)回复于 2004-12-07 12:08:40 得分 0
找到一篇vb的
http://www.microsoft.com/China/Community/program/originalarticles/TechDoc/clone.mspxTop
11 楼RunnaRen(什么时候才懂C#?)回复于 2004-12-07 12:30:32 得分 10
MemberwiseClone()方法执行的只是浅层拷贝。而深层拷贝要递归的拷贝其字段所引用的所有对象。
public class DeepClone : System.ICloneable
{
Person g;
Person b;
public Object Clone()
{
DeepClone dc = (DeepClone)this.MemberwiseClone();
dc.g = (Person)(this.g.Clone());
dc.b = (Person)(this.b.Clone());
return dc;
}
}Top




