在.NET有分兩種類型
- 值類型(int,double,char....)
- 參考類型(自行宣告的類別,string....)
而存放資料的方式也有兩種:
- 堆疊Stack
- 堆積Heap
談談Boxing和UnBoxing之前,我們先來了解Stack
和Heap
值類型(Value Type)會存取在Stack
記憶體區塊中
參考類型(Reference Type)內容會在Heap
記憶體區塊上,Stack會指向Heap上記憶體位置(有點像c++傳址)
如下圖
了解Stack
和Heap
後
我們來談談Boxing
和UnBoxing
Boxing:
型態由大轉小
int i=20;
object o=(object)i;
int強制轉型為object 因為我們所有物件都是繼承於object物件
原本值類型存在Stack中,但因為我們強轉成Object 20 會存在Heap記憶體區塊中.
如下圖
UnBoxing:
型態由小轉大(小轉大會有轉型出錯的問題)
int i=20;
object o=(object)i;
int j=(int)o;
將o Object強轉成int 在這個案例不會有問題,但如果是將o轉為char就會有問題
在執行UnBoxing 如下圖
可以看到原本存在Heap上的值 我們會把他搬回Stack並附值給J
參考MSDN https://msdn.microsoft.com/zh-tw/library/yz2be5wk.aspx
如果本文對您幫助很大,可街口支付斗內鼓勵石頭^^