C#中深度复制的代码问题求解

我有两个问题1、上面和下面两段代码都是深度复制,具体有什么不同呢?我的理解是它提到了递归,是不是:上面的代码是深度复制了Cloner类的一个对象,其中包括复制了引用类型的... 我有两个问题
1、上面和下面两段代码都是深度复制,具体有什么不同呢?我的理解是它提到了递归,是不是:
上面的代码是深度复制了Cloner类的一个对象,其中包括复制了引用类型的MyContent对象,但是只复制MyContent里面的值类型,而引用类型依然是引用。(即对MyContent内层进行浅复制)
下面的代码则是一层层地深度复制,不仅对Cloner类的对象进行深度复制,里面的MyContent也是进行深度复制
我的理解对吗?
2、Clone的语法具体是什么用的,可以用public object Clone(){}
然而下面又直接用MyContent.Clone()(直接在句点后面接Clone)
这两个句子有什么不同?应该如何区分或选择?
展开
 我来答
百度网友eb6ab18
2019-08-19 · TA获得超过583个赞
知道小有建树答主
回答量:1068
采纳率:83%
帮助的人:245万
展开全部
对于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;
追问
也就是说可以认为A anotherA = a.Clone() as A;是public object Clone(){}的简化形式吗?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式