在正式踏入 C# 數據類型的世界前,有個核心觀念必須釐清:C# 和 Java 一樣,都是強類型語言。這意味著兩個關鍵特性:第一,每個變數與運算式都擁有嚴格定義的類型;第二,所有數值傳遞——無論是直接賦值還是透過方法參數——都必須通過類型相容性檢查。這套機制從根本上杜絕了隱式類型轉換帶來的潛在錯誤。
C# 的數據類型劃分為兩大陣營:值類型與引用類型。它們最本質的區別在於資料存儲位置與訪問方式:
C# 內建 15 種預定義類型,其中 13 種為值類型,僅 string 與 object 為引用類型。
下表整理了所有基本值類型的關鍵資訊,涵蓋了整數、浮點數、十進位、布林與字元類型:
| 類別 | 關鍵字 | .NET 類型 | 大小/範圍 | 預設值 |
|---|---|---|---|---|
| 整數 | sbyte | System.SByte | 8 位元有號 (-128~127) | 0 |
| byte | System.Byte | 8 位元無號 (0~255) | 0 | |
| short | System.Int16 | 16 位元有號 | 0 | |
| ushort | System.UInt16 | 16 位元無號 | 0 | |
| int | System.Int32 | 32 位元有號 | 0 | |
| uint | System.UInt32 | 32 位元無號 | 0 | |
| long | System.Int64 | 64 位元有號 | 0L | |
| ulong | System.UInt64 | 64 位元無號 | 0L | |
| 浮點數 | float | System.Single | 32 位元 IEEE 754 | 0.0F |
| double | System.Double | 64 位元 IEEE 754 | 0.0 | |
| 高精度 | decimal | System.Decimal | 128 位元,28-29 位有效數字 | 0.0M |
| 布林 | bool | System.Boolean | true / false | false |
| 字元 | char | System.Char | 16 位元 Unicode (U+0000~U+FFFF) | '\0' |
byte 是 8 位元無號整數,char 是 16 位元 Unicode 字元。兩者不能隱式互轉,強制轉換時必須注意資料截斷或編碼問題。
C# 的 bool 僅能接受 true/false,絕不等價於整數 1/0。這與 C/C++ 截然不同,避免了 if (count) 這類隱性 Bug。
'A'"A"寫錯引號會導致類型推斷錯誤,編譯器會直接報錯。
| 轉義序列 | 字元 | 說明 |
|---|---|---|
| \' | ' | 單引號 |
| \" | " | 雙引號 |
| \\ | \ | 反斜線 |
| \0 | null | 空字元 |
| \a | BEL | 警告音 |
| \b | BS | 退格 |
| \f | FF | 換頁 |
| \n | LF | 換行 |
| \r | CR | 歸位 |
| \t | HT | 水平定位 |
| \v | VT | 垂直定位 |
| \uXXXX | Unicode | 4 位十六進位 Unicode |
| \xXXXX | Unicode | 十六進位 Unicode (變長) |
char c1 = 'A'; // 字面量
char c2 = '\u0041'; // Unicode 轉義
char c3 = '\x0041'; // 十六進位
char c4 = (char)65; // 數值強轉
object 是所有類型(內建與使用者自訂)的基底類別。任何類型的實例都可隱式轉型為 object 參考,這就是裝箱的由來:
object obj = 42; // int 裝箱為 object
object str = "Hello"; // string 本身就是引用類型
C# 內建 string 類型,底層為不可變字元陣列。看似修改字串,實則建立新實例:
string s1 = "A string";
string s2 = s1; // 兩變數指向同一物件
s1 = "Another string"; // s1 指向新物件,s2 不變
Console.WriteLine(s2); // 輸出 "A string"
此特性保證了執行緒安全,但頻繁拼接時建議使用 StringBuilder。
區域變數必須在使用前明確賦初值,否則編譯器報錯(CS0165)。類別欄位則有預設值(0、null、false 等),但良好習慣是顯式初始化。
小結:掌握值/引用類型的記憶體語義、基本類型範圍與轉換規則,是寫出高效、無 Bug C# 程式的基石。下一步建議深入探討泛型、可為 null 的值類型與記憶體管理進階主題。