談到裝箱拆箱,大概的意思就是值類型和引用類型的相互裝換——值類型到引用類型叫裝箱,反之就叫拆箱。
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是引用類型,它需要放在堆上;要把值類型放在堆上就需要執行一次裝箱操作。
要在運行時成功拆箱值類型,被拆箱的項必須是對一個對象的引用,該對象是先前通過裝箱該值類型的實例創建的。
下面舉一個例子: