C# 內建提供 16 種預先定義型別,區分為13 種簡單型別與3 種非簡單型別。所有預設型別的名稱皆採全小寫書寫。
graph TD
A[預定義型別] --> B[簡單型別]
A --> C[object]
A --> D[string]
A --> E[dynamic]
B --> F[非數值型別]
B --> G[數值型別]
F --> H[bool]
F --> I[char]
G --> J[整數]
G --> K[浮點數]
J --> L[8位元]
J --> M[16位元]
J --> N[32位元]
J --> O[64位元]
L --> P[sbyte]
L --> Q[byte]
M --> R[short]
M --> S[ushort]
N --> T[int]
N --> U[uint]
O --> V[long]
O --> W[ulong]
K --> X[decimal]
K --> Y[float]
K --> Z[double]
%% 葉節點標為綠色
style H fill:#90ee90
style I fill:#90ee90
style P fill:#90ee90
style Q fill:#90ee90
style R fill:#90ee90
style S fill:#90ee90
style T fill:#90ee90
style U fill:#90ee90
style V fill:#90ee90
style W fill:#90ee90
style X fill:#90ee90
style Y fill:#90ee90
style Z fill:#90ee90
style C fill:#90ee90
style D fill:#90ee90
style E fill:#90ee9013 種簡單型別
- 數值型別(共11種)整數 8 種:
sbyte/byte、short/ushort、int/uint、long/ulong;浮點數 3 種:float、double、decimal(decimal 專門用於金額高精度運算) - 非數值型別(共2種):
char(Unicode 單一字元)、bool(僅能存放 true / false)
重要特性:C# 的數值無法直接做為布林判斷條件,這點與 C/C++ 有明顯差異。
3 種非簡單參考型別
string(字元序列)、object(所有型別的基底類別)、dynamic(用於與動態語言互通)
C# 型別與 .NET 底層型別
所有內建預定義型別都會直接對應到底層 .NET 型別。C# 的關鍵字只是 .NET 完整類別名稱的別名,因此程式碼直接撰寫 .NET 原生類別名仍可正常編譯,但官方開發規範並不推薦此寫法。實務開發時,請優先使用 C# 內建關鍵字,而非完整 .NET 類名。
預定義簡單型別一覽
| C# 關鍵字 | 說明 | 可儲存數值範圍 | .NET 底層對應型別 | 預設值 |
|---|---|---|---|---|
| sbyte | 8 位元有號整數 | -128 ~ 127 | System.SByte | 0 |
| byte | 8 位元無號整數 | 0 ~ 255 | System.Byte | 0 |
| short | 16 位元有號整數 | -32768 ~ 32767 | System.Int16 | 0 |
| ushort | 16 位元無號整數 | 0 ~ 65535 | System.UInt16 | 0 |
| int | 32 位元有號整數 | -2147483648 ~ 2147483647 | System.Int32 | 0 |
| uint | 32 位元無號整數 | 0 ~ 4294967295 | System.UInt32 | 0 |
| long | 64 位元有號整數 | -9223372036854775808 ~ 9223372036854775807 | System.Int64 | 0 |
| ulong | 64 位元無號整數 | 0 ~ 18446744073709551615 | System.UInt64 | 0 |
| float | 單精準度浮點數 | 1.5×10⁻⁴⁵ ~ 3.4×10³⁸ | System.Single | 0.0f |
| double | 雙精準度浮點數 | 5×10⁻³²⁴ ~ 1.7×10³⁰⁸ | System.Double | 0.0d |
| bool | 布林型別 | true / false | System.Boolean | false |
| char | Unicode 字元 | U+0000 ~ U+FFFF | System.Char | \x0000(空字元) |
| decimal | 高精度十進位數值(28 位有效數字) | ±1.0×10⁻²⁸ ~ ±7.9×10²⁸ | System.Decimal | 0m |
預定義非簡單型別一覽
| C# 關鍵字 | 說明 | .NET 底層對應型別 |
|---|---|---|
| object | 所有型別(包含簡單實值型別)的基底類別 | System.Object |
| string | 由零個或多個 Unicode 字元組成的文字字串 | System.String |
| dynamic | 用於銜接動態語言組件的動態型別 | 無固定對應的 .NET 型別 |
int 等同 System.Int32、string 等同 System.String,兩者本質完全相同,編譯器會自動互相辨識;
開發編碼規範強制建議使用 C# 關鍵字(寫 int 而非 Int32),提升程式可讀性。
簡單型別又稱實值型別 Value Type
儲存單一數值,記憶體配置於堆疊;
宣告後未手動指派數值時,會自動賦予表格標註的預設值;
全部直接繼承自 object,支援裝箱、拆箱機制。(後續章節會詳細說明)
整數系列型別
- 開頭帶
u前綴(uint/ushort/ulong/byte):無號,只能存放非負數; - sbyte/short/int/long:有號,可存放正負整數。
浮點數系列型別
float:單精準度,後綴f,精準度低、運算速度快,適用圖形、3D 運算;double:雙精準度,後綴d,程式預設浮點常數型別,通用科學運算;decimal:高精度十進位,後綴m,專為金融、貨幣計算設計,不會出現浮點精準度遺失問題。
布林與字元型別
bool:僅兩種取值,無法與數字做隱式轉換;char:存放單一個 Unicode 字元,底層本質是 16 位元無號數字。
非簡單型別(參考型別 Reference Type)
- object:萬物基底類別,所有實值、參考型別都繼承自它,是裝箱機制的核心;
- string:特殊參考型別,字串內容不可變,空字串
""是合法預設實例; - dynamic:編譯階段不檢查型別,執行階段才解析成員,無固定 .NET 對應型別,多用於與 Python/Ruby 等動態語言整合,犧牲編譯期安全換取彈性。
static void Main(string[] args)
{
// 1. 8位元整數
sbyte sByteNum = -60;
byte byteNum = 200;
// 2. 16位元整數
short shortNum = -12000;
ushort uShortNum = 50000;
// 3. 32位元整數
int intNum = -888888;
uint uIntNum = 3000000000U;
// 4. 64位元整數
long longNum = -7000000000000L;
ulong uLongNum = 12000000000000000UL;
// 5. 浮點型別
float floatNum = 3.14f;
double doubleNum = 2.71828;
decimal decMoney = 999.99m;
// 6. 布林型別
bool flag = true;
// 7. Unicode字元
char ch = 'A';
// 8. 非簡單預定義型別
object obj = 123;
string str = "FOXDEVELOP.COM";
dynamic dy = "jack";
}Code language: JavaScript (javascript)
內建型別