c#的裝箱和拆箱
拆箱(unboxin)
給一個值裝箱(boxing)指隱式地把任何值型別轉換成型別物件。當一
個值型別被裝箱(boxing)時,一個物件例項就被分配,且值型別的值
被拷貝給新的物件。
看以下例子:
int nFunny = 2000;
object Funny = nFunny;
第二行的賦值暗示呼叫一個裝箱(boxing)操作。nFunny整型變數的值
被拷貝給oFunny物件。現在整型變數和物件變數都同時存在於棧中,但
物件的值居留在堆中。
那麼,它暗示著什麼呢?它們的值互相獨立——在它們之間沒有連線。
(oFunny沒有引用nFunny的值。) 以下程式碼說明了結果:
int nFunny = 2000;
object Funny = nFunny;
oFunny = 2001;
Console.WriteLine("{0} {1}", nFunny, oFunny);
程式輸出結果是:
2001 2000
當程式碼改變oFunny的值時,nFunny的值並沒有改變。只要你腦袋中有這
個copy動作,就能夠使用值型別的物件功能,發揮出你的巨大優勢!
拆箱(unboxin)
和裝箱(boxing)相比,拆箱(unboxin)是顯式操作——必須告訴編
譯器,你想從物件中抽取出哪一種值型別。當執行消框操作時,C#檢測
所請求的值型別實際上儲存在物件例項中。經過成功的校驗,該值被消
框。
這就是消框如何執行:
int nFunny = 2000;
object Funny = nFunny;
int nNotSoFunny = (int)oFunny;
如果錯誤地請求一個double值
double nNotSoFunny = (double)oFunny;
通用語言執行時(Common Language Runtime,簡寫CLR)將會引發一個
InvalidCastException異常。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-464498/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C#之拆箱,裝箱C#
- 深入理解C#的裝箱和拆箱C#
- Visual C#裝箱與拆箱C#
- Effective C#:儘量減少裝箱和拆箱C#
- Java的自動裝箱和拆箱Java
- java裝箱拆箱Java
- 深入剖析Java中的裝箱和拆箱Java
- 談談JavaScript中裝箱和拆箱JavaScript
- Java自動拆箱與裝箱Java
- c#之裝箱和取消裝箱C#
- Java中的自動裝箱與拆箱Java
- 資料型別及拆箱裝箱資料型別
- 如何理解Java中的自動拆箱和自動裝箱?Java
- 【java】JDK5的新特性→→自動裝箱和拆箱JavaJDK
- 深入淺出瞭解“裝箱與拆箱”
- 深入理解Java之裝箱與拆箱Java
- Java 效能筆記:自動裝箱/拆箱Java筆記
- 基礎鞏固、探尋Java裝箱和拆箱的奧妙!Java
- Java中的自動裝箱與自動拆箱Java
- Java語法糖2:自動裝箱和自動拆箱Java
- Java自動裝箱/拆箱 - Java那些事兒Java
- [JAVA] Java物件導向之包裝類,拆箱、裝箱Java物件
- java空指標出現的情況:拆箱裝箱Java指標
- dotnet學習筆記一 - 裝箱拆箱 (轉)筆記
- 通過原始碼瞭解Java的自動裝箱拆箱原始碼Java
- Java學習之自動裝箱和自動拆箱原始碼分析Java原始碼
- java中的內部類和自動拆裝箱Java
- .NET中的六個重要概念:棧、堆、值型別、引用型別、裝箱和拆箱型別
- .NET Core CSharp 中級篇 2-1 裝箱與拆箱CSharp
- 【轉】.NET中的六個重要概念:棧、堆、值型別、引用型別、裝箱和拆箱型別
- Java 效能要點:自動裝箱/ 拆箱 (Autoboxing / Unboxing)Java
- Integer 自動拆箱封箱
- java基礎(八) 深入解析常量池與裝拆箱機制Java
- 一文讀懂什麼是Java中的自動拆裝箱Java
- 【JS迷你書】基本型別之拆箱操作JS型別
- 原來 JS 還存在這樣的拆箱轉換JS
- 電子郵箱是qq郵箱嗎 電子郵箱和qq郵箱的區別聯絡介紹
- 夯實Java基礎系列2:Java自動拆裝箱裡隱藏的秘密Java