亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

可以幫忙解釋一下,C#關于深度復制的問題嗎?具體代碼如下

可以幫忙解釋一下,C#關于深度復制的問題嗎?具體代碼如下

郎朗坤 2021-11-19 15:11:43
使用下面的深度復制代碼;public class Content{public int Val;}public class Cloner:ICloneable{public Content MyContent=new Content();public Cloner(int newVal){MyContent.Val=newVal;}public object Clone(){Cloner clonerCloner=new Cloner(MyContent.Val);return clonerCloner;}}其中使用包含在源Cloner對象中的Content對象(MyContent)的Val字段,創建一個新Cloner對象。這個字段是一個值類型,所以不需要深度復制使用下面的代碼測試:Cloner mySource = new Cloner(5);Cloner mytarget = (Cloner)mySource.GetCopy();Console.WriteLine("myTarget.MyContent.Val={0}", mytarget.MyContent.Val);mySource.MyContent.Val = 2;Console.WriteLine("myTarget.MyContent.Val={0}", mytarget.MyContent.Val);得到如下結果:myTarget.MyContent.Val=5myTarget.MyContent.Val=5這次包含的對象是獨立的。注意有時在比較復雜的對象系統中,調用Clone()是一個遞歸過程。如,如果Cloner類的MyContent字段也需要深度復制,就要使用下面的代碼:(這句話要怎么理解,Cloner類的MyContent字段也需要深度復制,上面不是已經對MyContent進行了深度復制么,為什么調用Clone()是一個遞歸過程?)public class Cloner:ICloneable{public Content MyContent=new Content();...public object Clone(){Cloner clonerCloner=new Cloner();clonerCloner.MyContent=MyContent.Clone();return clonerCloner;}}這里調用了默認的構造函數,以便簡化創建一個新Cloner對象的語法。為使這段代碼能正常工作,還需要在Content類上實現ICloneable接口(能否幫忙給出在Content類上實現IConeable的代碼)
查看完整描述

2 回答

?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

有的時候,創建一個對象可能會非常耗時,比如對象需要從遠程數據庫中獲取數據來填充,又或者創建對象需要讀取硬盤文件。此時,如果已經有了一個對象,再創建新對象時,可能會采用復制現有對象的方法,而不是重新建一個新的對象。
淺度復制 和 深度復制 是以如何復制對象的成員(member)來劃分的。一個對象的成員有可能是值類型,有可能是引用類型。當我們對對象進行一個淺度復制的時候,對于值類型成員,會復制其本身(值類型變量本身包含了所有數據,復制時進行按位拷貝);對于引用類型成員(注意它會引用另一個對象),僅僅復制引用,而不創建其引用的對象。結果就是:新對象的引用成員和 復制對象的引用成員 指向了同一個對象。

深度復制就是將引用成員指向的對象也進行復制。實際的過程是創建新的引用成員指向的對象,然后復制對象包含的數據。深度復制可能會變得非常復雜,因為引用成員指向的對象可能包含另一個引用類型成員,最簡單的例子就是一個線性鏈表。如果一個對象的成員包含了對于線性鏈表結構的一個引用,淺度復制 只復制了對頭結點的引用,深度復制 則會復制鏈表本身,并復制每個結點上的數據。

查看完整回答
反對 回復 2021-11-24
?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

關鍵類象內引用淺拷貝保持引用類象內引用深拷貝連引用象起拷貝
比School類邊SchoolName校名稱teacher象
淺拷貝拷貝SchoolNameteacher前引用象(拷貝象修改teacher值影響象teacher值)深拷貝連teacher拷貝新象前象完全復制修改teacher值影響象teacher值

查看完整回答
反對 回復 2021-11-24
  • 2 回答
  • 0 關注
  • 369 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號