# C# 數據類型
在 C# 中,變量分為以下幾種類型:
* 值類型(Value types)
* 引用類型(Reference types)
* 指針類型(Pointer types)
## 值類型(Value types)
值類型變量可以直接分配給一個值。它們是從類 **System.ValueType** 中派生的。
值類型直接包含數據。比如 **int、char、float**,它們分別存儲數字、字母、浮點數。當您聲明一個 **int** 類型時,系統分配內存來存儲值。
下表列出了 C# 2010 中可用的值類型:
| 類型 | 描述 | 范圍 | 默認值 |
| --- | --- | --- | --- |
| 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 | 64 位有符號整數類型 | -923,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** 方法。表達式 _sizeof(type)_ 產生以字節為單位存儲對象或類型的存儲尺寸。下面舉例獲取任何機器上 _int_ 類型的存儲尺寸:
```
namespace DataTypeApplication
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Size of int: {0}", sizeof(int));
Console.ReadLine();
}
}
}
```
當上面的代碼被編譯和執行時,它會產生下列結果:
```
Size of int: 4
```
## 引用類型(Reference types)
引用類型不包含存儲在變量中的實際數據,但它們包含對變量的引用。
換句話說,它們指的是一個內存位置。使用多個變量時,引用類型可以指向一個內存位置。如果內存位置的數據是由一個變量改變的,其他變量會自動反映這種值的變化。**內置的** 引用類型有:**object**、**dynamic** 和 **string**。
### 對象(Object)類型
**對象(Object)類型** 是 C# 通用類型系統(Common Type System - CTS)中所有數據類型的終極基類。Object 是 System.Object 類的別名。所以對象(Object)類型可以被分配任何其他類型(值類型、引用類型、預定義類型或用戶自定義類型)的值。但是,在分配值之前,需要先進行類型轉換。
當一個值類型轉換為對象類型時,則被稱為 **裝箱**;另一方面,當一個對象類型轉換為值類型時,則被稱為 **拆箱**。
```
object obj;
obj = 100; // 這是裝箱
```
### 動態(Dynamic)類型
您可以存儲任何類型的值在動態數據類型變量中。這些變量的類型檢查是在運行時發生的。
聲明動態類型的語法:
```
dynamic <variable_name> = value;
```
例如:
```
dynamic d = 20;
```
動態類型與對象類型相似,但是對象類型變量的類型檢查是在編譯時發生的,而動態類型變量的類型檢查是在運行時發生的。
### 字符串(String)類型
**字符串(String)類型** 允許您給變量分配任何字符串值。字符串(String)類型是 System.String 類的別名。它是從對象(Object)類型派生的。字符串(String)類型的值可以通過兩種形式進行分配:引號和 @引號。
例如:
```
String str = "w3cschool.cc";
```
一個 @引號字符串:
```
@"w3cschool.cc";
```
C# string 字符串的前面可以加 @(稱作"逐字字符串")將轉義字符(\)當作普通字符對待,比如:
```
string str = @"C:\Windows";
```
等價于:
```
string str = "C:\\Windows";
```
@ 字符串中可以任意換行,換行符及縮進空格都計算在字符串長度之內。
```
string str = @"<script type=""text/javascript"">
<!--
-->
</script>";
```
用戶自定義引用類型有:class、interface 或 delegate。我們將在以后的章節中討論這些類型。
## 指針類型(Pointer types)
指針類型變量存儲另一種類型的內存地址。C# 中的指針與 C 或 C++ 中的指針有相同的功能。
聲明指針類型的語法:
```
type* identifier;
```
例如:
```
char* cptr;
int* iptr;
```
我們將在章節"不安全的代碼"中討論指針類型。
- C# 基礎
- C# 簡介
- C# 環境
- C# 程序結構
- C# 基本語法
- C# 數據類型
- C# 類型轉換
- C# 變量
- C# 常量
- C# 運算符
- C# 判斷
- C# 循環
- C# 封裝
- C# 方法
- C# 可空類型(Nullable)
- C# 數組(Array)
- C# 字符串(String)
- C# 結構(Struct)
- C# 枚舉(Enum)
- C# 類(Class)
- C# 繼承
- C# 多態性
- C# 運算符重載
- C# 接口(Interface)
- C# 命名空間(Namespace)
- C# 預處理器指令
- C# 正則表達式
- C# 異常處理
- C# 文件的輸入與輸出
- C# 高級
- C# 特性(Attribute)
- C# 反射(Reflection)
- C# 屬性(Property)
- C# 索引器(Indexer)
- C# 委托(Delegate)
- C# 事件(Event)
- C# 集合(Collection)
- C# 泛型(Generic)
- C# 匿名方法
- C# 不安全代碼
- C# 多線程
- ASP.NET 簡介
- Web Pages 教程
- ASP.NET Web Pages - 教程
- ASP.NET Web Pages - 添加 Razor 代碼
- ASP.NET Web Pages - 頁面布局
- ASP.NET Web Pages - 文件夾
- ASP.NET Web Pages - 全局頁面
- ASP.NET Web Pages - HTML 表單
- ASP.NET Web Pages - 對象
- ASP.NET Web Pages - 文件
- ASP.NET Web Pages - 幫助器
- ASP.NET Web Pages - WebGrid 幫助器
- ASP.NET Web Pages - Chart 幫助器
- ASP.NET Web Pages - WebMail 幫助器
- ASP.NET Web Pages - PHP
- ASP.NET Web Pages - 發布網站
- Razor 教程
- ASP.NET Razor - 標記
- ASP.NET Razor - C# 和 VB 代碼語法
- ASP.NET Razor - C# 變量
- ASP.NET Razor - C# 循環和數組
- ASP.NET Razor - C# 邏輯條件
- ASP.NET Razor - VB 變量
- ASP.NET Razor - VB 循環和數組
- ASP.NET Razor - VB 邏輯條件
- MVC 教程
- ASP.NET MVC 教程
- ASP.NET MVC - Internet 應用程序
- ASP.NET MVC - 應用程序文件夾
- ASP.NET MVC - 樣式和布局
- ASP.NET MVC - 控制器
- ASP.NET MVC - 視圖
- ASP.NET MVC - SQL 數據庫
- ASP.NET MVC - 模型
- ASP.NET MVC - 安全
- ASP.NET MVC - HTML 幫助器
- ASP.NET MVC - 發布網站
- Web Forms 教程
- ASP.NET Web Forms - 教程
- ASP.NET Web Forms - HTML 頁面
- ASP.NET Web Forms - 服務器控件
- ASP.NET Web Forms - 事件
- ASP.NET Web Forms - HTML 表單
- ASP.NET Web Forms - 維持 ViewState
- ASP.NET Web Forms - TextBox 控件
- ASP.NET Web Forms - Button 控件
- ASP.NET Web Forms - 數據綁定
- ASP.NET Web Forms - ArrayList 對象
- ASP.NET Web Forms - Hashtable 對象
- ASP.NET Web Forms - SortedList 對象
- ASP.NET Web Forms - XML 文件
- ASP.NET Web Forms - Repeater 控件
- ASP.NET Web Forms - DataList 控件
- ASP.NET Web Forms - 數據庫連接
- ASP.NET Web Forms - 母版頁
- ASP.NET Web Forms - 導航
- Web Pages 參考手冊
- ASP.NET Web Pages - 類
- ASP.NET Web Pages - WebSecurity 對象
- ASP.NET Web Pages - Database 對象
- ASP.NET Web Pages - WebMail 對象
- ASP.NET Web Pages - 更多幫助器
- MVC - 參考手冊
- Web Forms 參考手冊
- ASP.NET Web Forms - HTML 服務器控件
- ASP.NET Web Forms - Web 服務器控件
- ASP.NET Web Forms - Validation 服務器控件
- 免責聲明