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#的裝箱和拆箱C#
- Visual C#裝箱與拆箱C#
- java裝箱拆箱Java
- 深入理解C#的裝箱和拆箱C#
- 深入理解Java之裝箱與拆箱Java
- Effective C#:儘量減少裝箱和拆箱C#
- c#之裝箱和取消裝箱C#
- [JAVA] Java物件導向之包裝類,拆箱、裝箱Java物件
- Java自動拆箱與裝箱Java
- Java的自動裝箱和拆箱Java
- 談談JavaScript中裝箱和拆箱JavaScript
- 資料型別及拆箱裝箱資料型別
- 深入淺出瞭解“裝箱與拆箱”
- Java 效能筆記:自動裝箱/拆箱Java筆記
- Java中的自動裝箱與拆箱Java
- 深入剖析Java中的裝箱和拆箱Java
- Java自動裝箱/拆箱 - Java那些事兒Java
- Java學習之自動裝箱和自動拆箱原始碼分析Java原始碼
- Java中的自動裝箱與自動拆箱Java
- dotnet學習筆記一 - 裝箱拆箱 (轉)筆記
- java空指標出現的情況:拆箱裝箱Java指標
- 如何理解Java中的自動拆箱和自動裝箱?Java
- 通過原始碼瞭解Java的自動裝箱拆箱原始碼Java
- 【java】JDK5的新特性→→自動裝箱和拆箱JavaJDK
- Java語法糖2:自動裝箱和自動拆箱Java
- .NET Core CSharp 中級篇 2-1 裝箱與拆箱CSharp
- 基礎鞏固、探尋Java裝箱和拆箱的奧妙!Java
- Java 效能要點:自動裝箱/ 拆箱 (Autoboxing / Unboxing)Java
- Integer 自動拆箱封箱
- 【JS迷你書】基本型別之拆箱操作JS型別
- java中的內部類和自動拆裝箱Java
- .NET中的六個重要概念:棧、堆、值型別、引用型別、裝箱和拆箱型別
- 【轉】.NET中的六個重要概念:棧、堆、值型別、引用型別、裝箱和拆箱型別
- java基礎(八) 深入解析常量池與裝拆箱機制Java
- JS 基礎型別之裝箱操作JS型別
- 一文讀懂什麼是Java中的自動拆裝箱Java
- 原來 JS 還存在這樣的拆箱轉換JS
- C#效率優化(3)-- 使用foreach時避免裝箱C#優化