C 裝箱和拆箱

2021-09-25 21:29:35 字數 594 閱讀 9035

值型別例項進行裝箱時的步驟:

(1)在託管堆中分配記憶體。需要注意的是,由於是將值型別進行引用型別化,因而分配的記憶體空間除了值型別各個欄位所需的記憶體之外,還要加上託管堆所有物件都有的兩個額外成員(型別物件指標和同步塊索引)所需的記憶體。

(2)將值型別的字段複製到新分配的堆記憶體中。

(3)返回物件位址,即物件的引用。值型別成了引用型別。

-----------------------

mono執行時只是將值型別變數 v 的值複製到了乙個在託管堆上新建立的物件中。所以該物件的值顯然只是原始值的乙個副本,因而改變的原始值是不會改變箱內的值的。

-----------------------

常見的誤區:

就是將拆箱當作了裝箱的逆過程。其實並不是這樣的,相比於裝箱,拆箱的代價要小的多。拆箱其實就是獲取引用的過程,獲取的這個引用指向了乙個分配在託管堆上的物件中的值。

需要注意的是,拆箱並不涉及複製的過程,所以將值從託管堆上的物件中複製到值型別例項中,是拆箱之後緊跟的一步複製過程,而非拆箱本身。

另乙個需要關注的問題就是拆箱時,必須告訴編譯器要將 object 拆箱成什麼型別的。因此在拆箱時,一定要注意只能轉型為最初未裝箱的值型別。

c 裝箱和拆箱

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

C 裝箱和拆箱

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

C 裝箱和拆箱

裝箱用於描述把乙個值型別轉換為引用型別。執行庫會為堆上的物件建立乙個臨時的引用型別 箱子 int myage 30 object myobj myage boxing拆箱用於描述相反的過程,就是把裝箱的值型別強制轉換回值型別。這裡使用術語 強制轉換 因為轉換是顯示進行的。其語法類似於前面的裝箱 in...