c#中資料型別分為兩種:數值型別和引用型別,兩種型別相互轉換過程中就涉及到裝箱與拆箱操作,當數值型別轉換為引用型別就稱之為裝箱,相反過程為拆箱。裝箱操作為:
1. 在堆上分配一塊記憶體,用於儲存數值型別中的資料。
2. 將數值型別中的資料複製到目的記憶體中。
3. 引用變數指向該記憶體位置。
裝箱操作是乙個隱式操作,拆箱操作為乙個顯示操作,需要進行型別的強制轉換,乙個拆箱動作如下:
1. 檢查目標數值型別是否合法
2. 複製引用指向的堆資料到數值型別變數中。
測試程式如下:
static void main(string args)
",(int)o);
console.readline();
}
裝箱操作如下:
拆箱操作如下:
il反匯程式設計序如下:
.method private hidebysig static void main(string args) cil managed
" il_0010: ldloc.1
il_0011: unbox.any [mscorlib]system.int32 //拆箱
il_0016: box [mscorlib]system.int32 //裝箱
il_001b: call void [mscorlib]system.console::writeline(string,
object)
il_0020: nop
il_0021: call string [mscorlib]system.console::readline()
il_0026: pop
il_0027: ret
} // end of method program::main
c#中定義的值型別如下:
1. struct定義型別
2. 列舉型別
3. 數值型別(整數、浮點數)
4. 布林型別
這樣也就說明了上面的程式為何有再次裝箱操作:整數再次轉換為字串。
C 裝箱與拆箱
要掌握裝箱與拆箱,就必須了解cts及它的特點。net重要技術和基礎之一的cts common type system 顧名思義,cts就是為了實現在應用程式宣告和使用這些型別時必須遵循的規則而存在的通用型別系統。net將整個系統的型別分成兩大類 value type 和 reference type...
C 裝箱與拆箱
裝箱是將 值型別轉換為 引用型別 拆箱是將 引用型別 轉換為值型別 利用裝箱和拆箱功能,可通過允許 值型別的任何值與 object 型別 的值相互轉換,將值型別與引用型別鏈結起來 例如 int val 100 object obj val console.writeline 物件的值 obj 這是乙...
C 裝箱與拆箱
在前面提到了值型別和引用型別。這裡就來和大家一起了解一下,他們互相轉換的過程裝箱 boxing 拆箱 unboxing 由於c 中所有的資料型別都是由基類system.object繼承而來的,所以值型別和引用型別的值可以通過顯式 或隱式 操作相互轉換,而這轉換過程也就是裝箱 boxing 和拆箱 u...