c#的裝箱和拆箱

iDotNetSpace發表於2008-09-26

拆箱(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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章