C#中的浅拷贝和深拷贝
生活随笔
收集整理的這篇文章主要介紹了
C#中的浅拷贝和深拷贝
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
C#中有兩種類型變量,一種是值類型變量,一種是引用類型變量。對(duì)于前者,copy是屬于全盤復(fù)制;而對(duì)于后者,一般的copy只是淺copy,相當(dāng)于只傳遞一個(gè)引用指針一樣。因此對(duì)于后者進(jìn)行真正copy的時(shí)候,也是最費(fèi)事的,具體的說,必須為其實(shí)現(xiàn) ICloneable接口中提供的Clone方法。
? 淺拷貝(影子克隆):只復(fù)制對(duì)象的基本類型,對(duì)象類型,仍屬于原來的引用.
? 深拷貝(深度克隆):不緊復(fù)制對(duì)象的基本類,同時(shí)也復(fù)制原對(duì)象中的對(duì)象.就是說完全是新對(duì)象產(chǎn)生的.
? 淺拷貝和深拷貝之間的區(qū)別:淺拷貝是指將對(duì)象中的數(shù)值類型的字段拷貝到新的對(duì)象中,而對(duì)象中的引用型字段則指復(fù)制它的一個(gè)引用到目標(biāo)對(duì)象。如果改變目標(biāo)對(duì)象中引用型字段的值他將反映在原是對(duì)象中,也就是說原始對(duì)象中對(duì)應(yīng)的字段也會(huì)發(fā)生變化。深拷貝與淺拷貝不同的是對(duì)于引用的處理,深拷貝將會(huì)在新對(duì)象中創(chuàng)建一個(gè)新的和原是對(duì)象中對(duì)應(yīng)字段相同(內(nèi)容相同)的字段,也就是說這個(gè)引用和原是對(duì)象的引用是不同的,我們?cè)诟淖冃聦?duì)象中的這個(gè)字段的時(shí)候是不會(huì)影響到原始對(duì)象中對(duì)應(yīng)字段的內(nèi)容。所以對(duì)于原型模式也有不同的兩種處理方法:對(duì)象的淺拷貝和深拷貝。
? MemberwiseClone 方法創(chuàng)建一個(gè)淺表副本,方法是創(chuàng)建一個(gè)新對(duì)象,然后將當(dāng)前對(duì)象的非靜態(tài)字段復(fù)制到該新對(duì)象。如果字段是值類型的,則對(duì)該字段執(zhí)行逐位復(fù)制。如果字段是引用類型,則復(fù)制引用但不復(fù)制引用的對(duì)象;因此,原始對(duì)象及其復(fù)本引用同一對(duì)象。深拷貝,即實(shí)現(xiàn)ICloneable接口.ICloneable可用于深拷貝和淺拷貝。
? 淺拷貝(影子克隆):只復(fù)制對(duì)象的基本類型,對(duì)象類型,仍屬于原來的引用.
? 深拷貝(深度克隆):不緊復(fù)制對(duì)象的基本類,同時(shí)也復(fù)制原對(duì)象中的對(duì)象.就是說完全是新對(duì)象產(chǎn)生的.
? 淺拷貝和深拷貝之間的區(qū)別:淺拷貝是指將對(duì)象中的數(shù)值類型的字段拷貝到新的對(duì)象中,而對(duì)象中的引用型字段則指復(fù)制它的一個(gè)引用到目標(biāo)對(duì)象。如果改變目標(biāo)對(duì)象中引用型字段的值他將反映在原是對(duì)象中,也就是說原始對(duì)象中對(duì)應(yīng)的字段也會(huì)發(fā)生變化。深拷貝與淺拷貝不同的是對(duì)于引用的處理,深拷貝將會(huì)在新對(duì)象中創(chuàng)建一個(gè)新的和原是對(duì)象中對(duì)應(yīng)字段相同(內(nèi)容相同)的字段,也就是說這個(gè)引用和原是對(duì)象的引用是不同的,我們?cè)诟淖冃聦?duì)象中的這個(gè)字段的時(shí)候是不會(huì)影響到原始對(duì)象中對(duì)應(yīng)字段的內(nèi)容。所以對(duì)于原型模式也有不同的兩種處理方法:對(duì)象的淺拷貝和深拷貝。
? MemberwiseClone 方法創(chuàng)建一個(gè)淺表副本,方法是創(chuàng)建一個(gè)新對(duì)象,然后將當(dāng)前對(duì)象的非靜態(tài)字段復(fù)制到該新對(duì)象。如果字段是值類型的,則對(duì)該字段執(zhí)行逐位復(fù)制。如果字段是引用類型,則復(fù)制引用但不復(fù)制引用的對(duì)象;因此,原始對(duì)象及其復(fù)本引用同一對(duì)象。深拷貝,即實(shí)現(xiàn)ICloneable接口.ICloneable可用于深拷貝和淺拷貝。
轉(zhuǎn)載于:https://www.cnblogs.com/nuptjinlu/archive/2008/09/10/1288648.html
總結(jié)
以上是生活随笔為你收集整理的C#中的浅拷贝和深拷贝的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Chrome 的又一个bug?
- 下一篇: WebApplication和WebSi