## **介紹**
在C#中,變量分為以下幾種類型:
* 值類型
* 引用類型
* 指針類型
## **值類型**
| 類型 | 描述 | 范圍 | 默認值|
| --- | --- | --- | --- |
| bool | 布爾值 | True 或 False | False |
|byte |8位無符號整數 | 0~255 | 0 |
|char |16位Unicode字符 |U+0000 到 U+ffff | '\0' |
| decimal | 128位精確的十進制值,28-29有效位數 | (-7.9 x 10<sup>28</sup> 到 7.9 x 10<sup>28</sup>) / 10<sup>0~28</sup> | 0.0M |
| double | 64位雙精度浮點型 | (+/-)5.0 x 10<sup>-324</sup> 到 (+/-)1.7 x 10<sup>308</sup> | 0.0D |
| float |32位單精度浮點型 |-3.4 x 10<sup>38</sup> 到 3.4 x 10<sup>38</sup> |0.0F |
| int |32位有符號整數類型 | -2,147,483,648 到 2,147,483,647 | 0 |
| long | 63位有符號整數類型 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 0L |
| sbyte | 8 位有符號整數類型 | -128 到 127 | 0 |
| short | 16 位有符號整數類型 | -32,768 到 32,767 | 0 |
| uint | 32 位無符號整數類型 | 0 到 4,294,967,295 | 0 |
| ulong | 64 位無符號整數類型 | 0 到 18,446,744,073,709,551,615 | 0 |
|ushort|16 位無符號整數類型 | 0 到 65,535 |0|
可以使用`sizeof`方法獲取一個類型或者變量的存儲大小。
```
static void Main(string[] args)
{
? ? ? ? ?Console.WriteLine("Size of int: {0}",sizeof(int));
? ? ? ? ?Console.ReadLine();
}
```
## **引用類型**
引用類型不包含存儲在變量中的實際數據,是變量的引用。
內置的引用類型有:`object`、`dynamic`和`string`。
### **對象類型(Object)**
對象類型是C#通用類型系統中所有數據類型的基類。
對象類型可以被分配成任何其他類型,在分配值之前需要先進行類型轉換。
當一個值類型轉換為對象類型時,被稱為**裝箱**;當一個對象類型轉換為值類型時,稱為**拆箱**。
### **動態類型(Dynamic)**
在動態類型變量中可以存儲任何類型的值,這些變量的類型檢查是在運行時發生的。
```
// 聲明動態類型變量的語法
dynamic <variable_name> = value;
// 舉例
dynamic d = 20;
```
### **字符串類型(String)**
字符串類型允許給變量分配任何字符串值。
可以通過引號和@引號來進行分配。
```
String str = "Hello World";
@"Hello World";
```
字符串前面可以加@,將轉義字符"\"當作普通字符對待。
~~~
string str = @"C:\Windows";
// 等價于
string str = "C:\\Windows";
~~~
### **指針類型(Pointer types)**
指針類型的變量存儲內存地址。
~~~
// 聲明指針類型的語法;
type* identifier;
// 例如
char* cptr;
int* iptr;
~~~