目錄
C#語言是一種強類型語言,在程序中用到的變量、表達式和數值等都必須有類型。在C#中,數據類型分爲兩大類:一類是值類型、一類是引用類型。
值類型
所謂值類型就是包含一個實際數據的量。當定義一個值類型的變量是,C#會根據他所聲明的類型,以堆棧方式分配一塊大小相適應的存儲區域給這個變量,隨後對這個變量的讀寫操作就直接在這塊內存區域進行。
C#中的值類型包括:簡單類型、枚舉類型和結構類型。廢話不多說,一張表勝過千言萬語。
類別 | 描述 | |
---|---|---|
值類型 | 基本數據類型 | 整型:int |
長整形:long | ||
浮點型:float | ||
字符型:char | ||
布爾型:bool | ||
枚舉類型 | 枚舉:enum | |
結構類型 | 結構:struct |
引用類型
一個引用類型的變量不存儲它們所代表的實際數據,而是存儲實際數據的引用。引用類型包括類、接口、數組、object、string 。直接上圖。
注:object是C#中所有類型的根類,string類型是一個從object類直接繼承的密封類型。
類別 | 描述 | |
---|---|---|
引用類型 | 類 | 基類:System.Object |
字符串:string | ||
自定義類:class | ||
接口 | 接口:interface | |
數組 | 數組:int[],string[] |
值類型與引用類型的關係
區別
一、將一個值類型變量賦給另一個值變量類型時,將複製包含的值。引用類型變量的賦值只複製對對象的引用,而不復制對象本身。
二、C#中,值類型就分配在堆棧中,堆棧內存區域內保存着值類型的值,內存區域可以通過變量名來存取。引用類型分配在堆中,對象分配在堆時,返回的是地址,這個地址被賦值給引用。
(感覺跟VB中按值傳遞和按址傳遞有點類似,只是感覺,具體如何接下來還得查)
三、值類型不可能派生出新的類型,值類型不可能包含null值。
“裝箱”和“拆箱”
C#中用“裝箱”和“拆箱”類實現值類型與引用類型之間的轉換。
一、“裝箱”就是將值類型包裝成引用類型的處理過程。
二、“拆箱”它是將一個object類型轉換成值類型。