關於淺拷貝和深拷貝,我的理解不是很清晰,簡單說來,我認為是這樣子:
淺拷貝:引用成員在被拷貝時僅複製源物件中引用成員的位址到新物件中,所以在新物件中對引用成員進行更改會影響到源物件(除對引用成員進行賦值外)。
深拷貝:引用成員在拷貝時新建乙個引用物件到新物件中,且將源物件中引用物件的成員值複製到新物件的引用物件中,所以在新物件中對引用成員進行更改不會影響源物件。
這段程式的輸出為:
obja1.refclass.field = 10
obja2.refclass.field = 10
obja1.refclass.field = 10
obja2.refclass.field = 30
objb1.refclass.field = 20
objb2.refclass.field = 10
要注意的是,本例中實現深拷貝的classb類及其引用成員refclass類必須新增serializable特性。
usingsystem;
using
system.collections;
using
system.collections.generic;
using
system.text;
using
system.io;
using
system.runtime.serialization.formatters.binary;
namespace
//被引用類,必須新增serializable特性,否則不能實現序列化
[serializable]
class
refclass
set }
} //
淺拷貝示例
class
classa : icloneable
set }
public
classa()
public
object
clone() }
//深拷貝示例,必須新增serializable特性,否則不能實現序列化
[serializable]
class
classb : icloneable }
public
classb() //
深拷貝
public
object
clone() }
class
program }
}
物件的深拷貝 序列化拷貝
簡介 system.object 幾乎是所有的類 結構 委託型別的基類。system.object有乙個memberwiseclone 的方法來幫助我們建立乙個當前物件的例項。存在的問題 system.object 提供的memberwiseclone 方法只是物件的淺拷貝,只能把當前物件的非靜態字...
WPF控制項深拷貝 序列化 反序列化
今天debuglzq在做wpf拖動總結的時候,遇到了這個問題。baidu了下,貌似沒有解決這個問題的權威答案,遂寫下這篇博文。我想做的事情是 拖動乙個窗體內的控制項 rectangle 到另乙個容器控制項內,而保留原來的控制項。為了更好地把問題說清楚,請看如下 片段 void canvas1 dro...
WPF控制項深拷貝 序列化 反序列化
原文 wpf控制項深拷貝 序列化 反序列化 今天debuglzq在做wpf拖動總結的時候,遇到了這個問題。baidu了下,貌似沒有解決這個問題的權威答案,遂寫下這篇博文。我想做的事情是 拖動乙個窗體內的控制項 rectangle 到另乙個容器控制項內,而保留原來的控制項。為了更好地把問題說清楚,請看...