1. 程式人生 > >裝箱(boxing)與拆箱(unboxing)

裝箱(boxing)與拆箱(unboxing)

裝箱與拆箱的概念是C#型別系統的核心。它在值型別(Value-Type)與引用型別(reference-Type)之間架起了一座橋樑,使得任何值型別的值者可以轉換為Object型別的值,反過來轉換也可以,裝箱與折箱使得我們能夠統一的來考察型別系統,其中任何型別的值最終都 可按物件處理。

一、裝箱的具體操作

從託管堆中分配好記憶體,分配的記憶體是值型別的各個欄位所需要的記憶體量,加上同步塊與方法表所需的記憶體。

2、值型別的欄位複製到新分配的託管堆記憶體。

3、返回物件的地址引用(物件指標),現在這個地址是對一個物件的引用,值 型別現在是一具引用型別。

二、拆箱操作

1、檢查裝箱引用,如果為Null,則丟擲NullReferecneException異常。

2、根據顯式型別轉換過程中的宣告,來檢查裝箱物件中的型別,如果不是,則丟擲InVaildCastException異常。

3、將該值從例項複製到值型別變數中。