眾所周知,c#
複製有深度複製和淺度複製,這裡本人新增了它們與賦值運算(
=)進行複製的的比較。
首先,定義乙個類content
作為後面要用的字段型別,
content
包含乙個
int型字段
val。
然後,定義值型別mystruct
和myclass
,各包含乙個值型別欄位和乙個引用型別字段。並且它們都支援
icloneable
介面,實現了深度複製和淺度複製。
接著,main
函式,對
myclass
和mystruct
都分別用了三種複製方法,輸出它們的值,然後改變源物件的值,再輸出。
最後,結果如圖,重要的是紅色矩形框中的內容
結論:對於引用型別的變數,賦值複製後 對源物件值型別欄位和引用型別欄位的改變 都會反應在目標物件中;對於值型別的變數,賦值複製後 對源物件值型別欄位的改變不會反應在目標物件,而對源物件引用型別欄位的改變則會反應在目標物件中。
至於深度複製和淺度複製的比較就不說了,放在這裡只是做個對比,大家應該很明白的。
問題:在給mystruct
新增icloneable
介面實現深度複製和淺度複製時,返回的是
object
。雖說結構體是值型別,但其繼承的
valuetype
是引用型別,啊呀呀,這個返回
object
到底對不對呢?剛開始學
c#,這個問題慢慢去研究吧。
C 物件比較 值型別 引用型別
region 引用物件比較 引用物件比較 public static bool compareobject object obja,object objb else if obja dbnull.value objb dbnull.value else if obja dbnull.value ob...
C 值型別,引用型別
2,引用型別 概念 值型別直接儲存其值,而引用型別儲存對其值的引用。引用型別 string,class,陣列 派生於system.array 委託 派生於system.delegate 介面。引用型別當宣告乙個類時,只在棧中分配一小片記憶體用於容納乙個位址,而此時並沒有為其分配堆上的記憶體空間。3,...
C 值型別與引用型別
1.主要內容 型別的基本概念 值型別深入 引用型別深入 值型別與引用型別的比較及應用 2.基本概念 c 中,變數是值還是引用僅取決於其資料型別。c 的基本資料型別都以平台無關的方式來定義,c 的預定義型別並沒有內置於語言中,而是內置於.net framework中。net使用通用型別系統 cts 定...