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 28 到 7.9 x 10 28 ) / 10 0 到 28 | 0.0M |
double | 64 位双精度浮点型 | (+/-)5.0 x 10 -324 到 (+/-)1.7 x 10 308 | 0.0D |
float | 32 位单精度浮点型 | -3.4 x 10 38 到 + 3.4 x 10 38 | 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;
我們將在章節"不安全的代碼"中討論指針類型。