裝箱(boxing)和拆箱(unboxing)
裝箱和拆箱機制使得在c#型別系統中,任何值型別、引用型別和object型別之間進行轉換,我們稱這種轉化為繫結連線。簡單的說,有了裝箱
和拆箱的概念,對任何型別的值來說最終我們都可以看作是obect型別。
1、裝箱轉換
裝箱轉換是指將乙個值型別隱式地轉換成乙個object型別,或者把這個值型別轉換成乙個被該值型別應用的介面型別(inte***ce-type)。
把乙個值型別的值裝箱,也就是建立乙個object例項並將這個值複製給這個object。比如:
int i = 10;
object obj = i;
也可以用顯示的方式來轉換
int i = 10;
object obj = object(i);
2、拆箱轉換
和裝箱轉換正好相反,拆箱轉換是指將乙個物件型別顯式地轉換成乙個值型別,或是將乙個介面型別顯式地轉換成乙個執行該介面的值類
型,拆箱的過程分為兩步:首先,檢查這個物件例項,看它是否為給定的值型別的裝箱值。然後,把這個例項的值拷貝給值型別的變數。比如
:int i = 10;
object obj = i;
int j = (int)obj;
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 返回物件位址,即...