服務熱線
153 8323 9821
C# 中的數據類型都是從 System.Object 類中派生出來的,而且利用了"裝箱"和"開箱"的技術。
"裝箱"和"開箱"的意思很簡單,請看示例:
int myint = 5;///值類型
object har = myint; //myint 裝箱到 har
在上面代碼的第一行,我們創建了int類型的變量 myint. int 類型是一種數值類型(因為它是一種基本類型).在第二行,編譯器看到變量 myint 被復制到一個叫做 har的引用類型變量.這時編譯器就生成將這個值裝箱所需的MSIL代碼.
現在,要將 har轉換為數值類型,就可以執行一個顯式轉換:
int myint = 5;//值類型
object har = myint;//裝箱
int myint2 = (int) har;//開箱
裝箱與開箱
難道C#也是兩種不同的數據類型嗎?不是。那它是怎么實現類型兼容的呢?那就是“裝箱”(boxing)來實現的。最簡單的理解就是:裝箱就是將數值類型轉換為引用類型。相對應的就是引用類型通過“開箱”轉換為數值類型。
這項技術之所以如此“偉大”,是因為一個對象在它需要是一個對象的時候,它就僅僅是一個對象。比如:如果您聲明了一個System.int32類型的數值類型變量。您可以把它作為參數傳遞給任何方法,如果該方法的參數類型定義為System.Object,系統會自動執行裝箱操作,將它轉變成一個Object。對于程序員來說,它和普通的數據類型一樣,但可以當作對象來操作。但事實上它只是堆棧上的4個字節而已。如:
int temp = 58; //數值類型
System.Object bar = temp; //temp 被執行裝箱操作轉變成 對象類型 bar 這是編譯器就生成該值裝箱所需的MSIL代碼。
現在,要把bar轉換為數值類型,就可以執行一個顯示轉換。
int temp = 58;
System.Object bar = temp;
int temp2 = (int)bar;
注意:裝箱就是將數值類型轉換成引用類型。
開箱就是將引用類型轉換成數值類型。(需指明被轉換的類型,因為它可以被轉換成任何類型)
上一篇:C#中\t和\n分別是什么意思?
下一篇:C#泛型List