## **介绍**
在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;
~~~