標籤:c# 拆箱 裝箱 類型轉換
C#的資料類型分為三類,值類型,參考型別和指標類型。指標類型只能用於不安全模式,而值類型和參考型別通過拆箱和裝箱機制可以相互轉換,通過中間的object類型,所以C#的所有種類直接或間接地從object類種類派生而來。
值類型
值類型資料存放區在棧中,棧用於存放固定長度的資料,分為簡單類型,結構類型和枚舉類型。
結構類型:把不同類型的資料群組合在一起,便於使用。跟類相似,包含資料成員和函數成員的資料結構,類類型是一種參考型別。結構類型用關鍵字Struct定義,可以嵌套定義。
枚舉類型:成員只能是整數類型,枚舉類型主要用於表示一組邏輯上相關項目的組合,使用關鍵字Enum來定義。
結構類型的變數值包含了所有成員的值,枚舉類型只能列舉出個各成員。預設第一個元素對應的整數值為0.
枚舉類型比無格式的整數的優勢:
使代碼易於維護。
代碼清晰,允許用描述的名稱表示整數值
代碼易於鍵入。
參考型別
參考型別資料存放區在堆中,堆是由new分配的記憶體,一般由程式員分配釋放。一般速度比較慢,容易產生記憶體片段大多數複雜的C#資料類型,包括我們自己聲明的類都是引用類,它們分配在堆中。
該類型的變數不直接儲存所包含的值,指向它要儲存的值,儲存實際資料的引用值的地址。
參考型別有數組,類,委託和介面4中。
裝箱和拆箱
值類型和應用類型之間是可以轉換的,這種轉換的實現,依賴於一種機制:裝箱(Boxing)和裝箱(unboxing).拆箱和裝箱對任何類型的值來說最終都可以看作object類型。
裝箱:將一個值類型隱式的轉換為Object類型,把值類型的值裝箱,也就是建立一個object執行個體並將值賦給object
Int a=10;
Object obj =a;
拆箱:把Object類型顯示的轉換成一個值類型。先檢驗對象執行個體,將值從執行個體中複製出來,賦給值類型變數。
Int k=10;
Object obj=k;
Int j =(int)obj;
C#之拆箱,裝箱