C#中深度复制的代码问题求解
我有两个问题1、上面和下面两段代码都是深度复制,具体有什么不同呢?我的理解是它提到了递归,是不是:上面的代码是深度复制了Cloner类的一个对象,其中包括复制了引用类型的...
我有两个问题
1、上面和下面两段代码都是深度复制,具体有什么不同呢?我的理解是它提到了递归,是不是:
上面的代码是深度复制了Cloner类的一个对象,其中包括复制了引用类型的MyContent对象,但是只复制MyContent里面的值类型,而引用类型依然是引用。(即对MyContent内层进行浅复制)
下面的代码则是一层层地深度复制,不仅对Cloner类的对象进行深度复制,里面的MyContent也是进行深度复制
我的理解对吗?
2、Clone的语法具体是什么用的,可以用public object Clone(){}
然而下面又直接用MyContent.Clone()(直接在句点后面接Clone)
这两个句子有什么不同?应该如何区分或选择? 展开
1、上面和下面两段代码都是深度复制,具体有什么不同呢?我的理解是它提到了递归,是不是:
上面的代码是深度复制了Cloner类的一个对象,其中包括复制了引用类型的MyContent对象,但是只复制MyContent里面的值类型,而引用类型依然是引用。(即对MyContent内层进行浅复制)
下面的代码则是一层层地深度复制,不仅对Cloner类的对象进行深度复制,里面的MyContent也是进行深度复制
我的理解对吗?
2、Clone的语法具体是什么用的,可以用public object Clone(){}
然而下面又直接用MyContent.Clone()(直接在句点后面接Clone)
这两个句子有什么不同?应该如何区分或选择? 展开
1个回答
展开全部
对于1的理解,你是正确的,总的来说,ICloneable如果不能在派生类的所有上级类中实现,那么就没太大的意义,也不可靠。举例说,有类A,派生类B,B又派生类C,你在C里实现ICloneable进行深度复制,那么必须保证B也对自己做深度复制,A也一样,不然的话,C的Clone方法可能不完全,最终得到一个并不是深度复制的“半成品”。这也就是为什么《More Effective C#》一书中告诫我们尽量不要去实现ICloneable,除非必须的原因。
对于2.具体用法就是"对象.Clone() as 类型",如:
A a = new A();
A anotherA = a.Clone() as A;
对于2.具体用法就是"对象.Clone() as 类型",如:
A a = new A();
A anotherA = a.Clone() as A;
追问
也就是说可以认为A anotherA = a.Clone() as A;是public object Clone(){}的简化形式吗?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询