C 值型別 引用型別複製之比較

2021-06-16 04:42:41 字數 781 閱讀 2444

眾所周知,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 定...