C 的裝箱和拆箱

2022-07-18 18:30:16 字數 680 閱讀 2399

談到裝箱拆箱,大概的意思就是值型別和引用型別的相互裝換——值型別到引用型別叫裝箱,反之就叫拆箱。

1.型別的理解

既然是型別之間的相互轉換,那首先就要說清楚型別。我們都知道sysyem.object型別是所有內建型別的基類。那麼如何區分值型別和引用型別呢?最簡單的乙個區分標準就是所有的值型別都繼承自system.value,也就是說所有繼承自system.valuetype的型別都是值型別,而其他型別都是引用型別。

簡單的說:

(1)值型別:整型:int;長整型:long;浮點型:float;字元型:char;布林型:bool;列舉:enum;結構:struct;它們統一繼承 自system.valuetype。

(2)引用型別:陣列,使用者定義的類、介面、委託,object,字串等。

2.裝箱和拆箱的深入理解

object obj = 1;

這行語句將整型常量1賦給object型別的變數obj;我們知道常量1是值型別,值型別是要放在棧上的,而object是引用型別,它需要放在堆上;要把值型別放在堆上就需要執行一次裝箱操作。

要在執行時成功拆箱值型別,被拆箱的項必須是對乙個物件的引用,該物件是先前通過裝箱該值型別的例項建立的。 

下面舉乙個例子:

c 裝箱和拆箱

c 裝箱和拆箱 概念 裝箱 將值型別轉換為引用型別的過程叫做裝箱 值型別 引用型別 相反,拆箱 將引用型別轉換為值型別 叫做拆箱 引用型別 值型別 裝箱例子 int i 2008 object obj i console.writeline 1 i的值為,裝箱之後的值 i,obj i 927 con...

C 裝箱和拆箱

1 什麼是裝箱和拆箱 裝箱是將值型別轉換為引用型別 拆箱是將引用型別轉換為值型別 2 什麼時候需要裝箱?值型別是高效輕量的型別,因為預設情況下在堆上不包括他們的物件元件,然而,如果我們需要物件元件,這個時候就需要裝箱了。最常見的場景就是 乙個方法你希望能共用,設定的引數型別是object型別 引用型...

C 裝箱和拆箱

值型別例項進行裝箱時的步驟 1 在託管堆中分配記憶體。需要注意的是,由於是將值型別進行引用型別化,因而分配的記憶體空間除了值型別各個欄位所需的記憶體之外,還要加上託管堆所有物件都有的兩個額外成員 型別物件指標和同步塊索引 所需的記憶體。2 將值型別的字段複製到新分配的堆記憶體中。3 返回物件位址,即...