C#數據類型
在C#中,變量分為以下幾種類型:
-
值類型
-
引用類型
-
指針類型
值類型
值類型變量可以直接賦值。它們衍生自類System.ValueType。
值類型直接包含的數據。一些實例是整數,字符,浮點數,其存儲的數字,字母,浮點數,分彆。當聲明一個int類型,係統分配內存來存儲值。
下表列出了在C#2010可用值的類型:
類型 | 表示 | 範圍 | 默認值 |
---|---|---|---|
bool | 布爾值 | True 或 False | False |
byte | 8-bit 無符號整數 | 0 - 255 | 0 |
char | 16-bit Unicode字符 | U +0000 到 U +ffff | '\0' |
decimal | 128-bit 使用28-29顯著數字精確十進製值 | (-7.9 x 1028 到 7.9 x 1028) / 100 - 28 | 0.0M |
double | 64-bit 雙精度浮點類型 | (+/-)5.0 x 10-324 到 (+/-)1.7 x 10308 | 0.0D |
float | 32-bit 單精度浮點類型 | -3.4 x 1038 到 + 3.4 x 1038 | 0.0F |
int | 32-bit 符號整型 | -2,147,483,648 到 2,147,483,647 | 0 |
long | 64-bit 符號整型 | -923,372,036,854,775,808 到 9,223,372,036,854,775,807 | 0L |
sbyte | 8-bit 符號整型 | -128 到 127 | 0 |
short | 16-bit 符號整型 | -32,768 to 32,767 | 0 |
uint | 32-bit 無符號整型 | 0 到 4,294,967,295 | 0 |
ulong | 64-bit 無符號整型 | 0 到 18,446,744,073,709,551,615 | 0 |
ushort | 16-bit 無符號整型 | 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
引用類型
引用類型不包含存儲在變量的實際的數據,但它們包含一個引用的變量。
換句話說,它們是指一個存儲器位置。使用一個以上的變量,則該引用類型可以指內存位置。如果在存儲器位置中的數據由變量之一改變時,其他變量自動反映這一變化值。內置引用類型的例子是:對象,動態和字符串。
對象類型
對象類型是在C#通用類型係統(CTS)的所有數據類型的最終基類。對象是System.Object類的一個彆名。所以,對象類型可以分配的任何其他類型的,值類型,引用類型,預定義或用戶定義類型的值。然而,賦值之前,它需要類型轉換。
當值類型被轉換為對象的類型,它被稱為裝箱和在另一方麵,當一個對象類型轉換為一個值的類型,它被稱為拆箱。
object obj; obj = 100; // this is boxing
動態類型
可以存儲任何類型的值在動態數據類型的變量中。類型檢查這些類型的變量發生在運行時。
聲明動態類型的語法是:
dynamic <variable_name> = value;
例如,
dynamic d = 20;
動態類型類似於對象除了對象類型變量的類型檢查的類型發生在編譯的時候,而對於動態類型的變量發生在運行時。
字符串類型
字符串類型,可以指定任何字符串值的變量。字符串類型是System.String類的彆名。它是從對象類型派生。一個字符串類型的值可以以兩種形式使用字符串分配:引用和@引用。
例如,
String str = "Yiibai Yiibai";
一個@引用字符串的樣子:
@"Yiibai Yiibai";
用戶定義的參考類型是:類,接口,或委托。我們將在後麵的章節中討論這些類型。
指針類型
指針類型變量存儲的另一類型的存儲器地址。在C#中的指針都具有相同的功能,用C或C++。
聲明指針類型的語法是:
type* identifier;
例如,
char* cptr; int* iptr;
我們將在第一章“不安全代碼”討論指針類型。