C#之拆箱,裝箱

00潤物無聲00發表於2014-12-19

          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;

相關文章