C# 是強型別語言:所有變數操作皆依型別進行,編譯器嚴格檢查型別相容性,確保資料合法性與一致性。變數必須先宣告型別再使用。
bool hasContent = true;
bool noContent = false;
Console.WriteLine($"It is {hasContent} that C# provides content.");
// 輸出: It is True that C# provides content.
| 型別 | 位元 | 範圍 |
|---|---|---|
| sbyte | 8 | -128 ~ 127 |
| byte | 8 | 0 ~ 255 |
| short | 16 | -32,768 ~ 32,767 |
| ushort | 16 | 0 ~ 65,535 |
| int | 32 | -2,147,483,648 ~ 2,147,483,647 |
| uint | 32 | 0 ~ 4,294,967,295 |
| long | 64 | -9.22×10¹⁸ ~ 9.22×10¹⁸ |
| ulong | 64 | 0 ~ 1.84×10¹⁹ |
| char | 16 | 0 ~ 65,535 (Unicode 字元) |
char 代表單一 Unicode 字元,不可直接參與數學運算。
| 型別 | 位元 | 精度 | 範圍 |
|---|---|---|---|
| float | 32 | 7 位數字 | 1.5×10⁻⁴⁵ ~ 3.4×10³⁸ |
| double | 64 | 15-16 位數字 | 5.0×10⁻³²⁴ ~ 1.7×10³⁰⁸ |
| decimal | 128 | 28-29 位十進位 | 1.0×10⁻²⁸ ~ 7.9×10²⁸ |
金融計算請使用 decimal,避免二進位浮點誤差。
| 分類 | 運算子 | 結合性 |
|---|---|---|
| 主要 | () x.y f(x) a[x] x++ x-- new typeof sizeof checked unchecked | 左 |
| 單目 | + - ! ~ ++x --x (T)x | 左 |
| 乘法 | * / % | 左 |
| 加法 | + - | 左 |
| 位移 | << >> | 左 |
| 關係 | < > <= >= is | 左 |
| 相等 | == != | 右 |
| 邏輯 AND | & | 左 |
| 邏輯 XOR | ^ | 左 |
| 邏輯 OR | | | 左 |
| 條件 AND | && | 左 |
| 條件 OR | || | 左 |
| 條件 | ?: | 右 |
| 指派 | = *= /= %= += -= <<= >>= &= ^= |= | 右 |
左結合:從左至右運算(如 a - b - c 等同 (a - b) - c)
右結合:從右至左運算(指派 a = b = c 等同 a = (b = c))
int unary = 0;
int preInc = ++unary; // 先加後取值 → 1
int preDec = --unary; // 先減後取值 → 0
int postDec = unary--; // 先取值後減 → 0 (unary 變 -1)
int postInc = unary++; // 先取值後加 → -1 (unary 變 0)
sbyte bitNot = 0;
bitNot = (sbyte)(~bitNot); // 位元取反:0 → -1 (0xFF)
bool logNot = false;
logNot = !logNot; // 邏輯非:false → true
關鍵差異:前置 ++x 先運算後取值,後置 x++ 先取值後運算。
int x = 7, y = 5;
int result = x / y; // 整數除法 → 1
float floatResult = (float)x / (float)y; // 強制轉型 → 1.4
result = x % y; // 餘數 → 2
result += x; // 等同 result = result + x
整數運算結果為 int,若指派給較小型別(byte、short)需強制轉型,注意資料遺失風險。
string 為參考型別,內容不可變。字面常數以雙引號括住:"Hello World"。支援逸出字元(\n、\t、\\)與逐字字串(@"C:\Path")。
// 宣告並初始化
int[] myInts = { 5, 10, 15 };
string[] names = new string[3] { "Joe", "Matt", "Robert" };
// 存取
Console.WriteLine(myInts[0]); // 5
names[1] = "Mary";
double[,] matrix = new double[2, 2];
matrix[0, 0] = 3.14;
matrix[1, 1] = 2.11;
bool[][] jagged = new bool[2][];
jagged[0] = new bool[2];
jagged[1] = new bool[1]; // 每維長度可不同
string[] arr = { "Linda", "Lily", "Adidas" };
int len = arr.Length; // 總長度 3
int dimLen = arr.GetLength(0); // 第 0 維長度 3
Array.Sort(arr); // 排序
Array.Reverse(arr); // 反轉
newint len = 3; string[] arr = new string[len] { "a", "b", "c" }; 合法(len 為變數)const int len = 3; 亦可,但非常數變數不可用於固定大小語法(new string[len] 中 len 必須為常數)