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