運算子 (C# 程式設計手冊)
更新: 2008 年 7 月
在 C# 中,「運算子」(Operator) 是一個詞彙或符號,需要以一個或多個運算式或「運算元」(Operand) 做為輸入並傳回值。使用一個運算元的運算子稱為「一元」(Unary) 運算子,例如遞增運算子 (++) 或 new。使用兩個運算元的運算子則稱為「二元」(Binary) 運算子,例如算術運算子 (+、-、* 和 /)。還有一種運算子稱為條件運算子 (?:),它需要三個運算元,是 C# 中唯一的三元運算子。
下列 C# 陳述式包含一個一元運算子和一個運算元。遞增運算子 ++ 會修改運算元 y 的值:
y++;
下列 C# 陳述式包含兩個二元運算子,這兩個運算子各有兩個運算元。指派運算子 = 的運算元為整數 y 和運算式 2 + 3。運算式 2 + 3 本身包含加法運算子,運算元為整數值 2 和 3:
y = 2 + 3;
運算元可以是任何大小的有效運算式,也可以由任何數目的其他運算所組成。評估運算式時,編譯器的第一個步驟是從左到右評估所有運算元。評估過所有運算元之後,就會以稱為「運算子優先順序」(Operator Precedence) 的特定順序評估運算子。下表根據運算子所執行的運算類型,將運算子分為幾類。每個分類都是依照優先順序列出。
主要運算子
運算式 |
說明 |
---|---|
x.y |
成員存取 (Member Access) |
f(x) |
方法和委派叫用 |
a[x] |
陣列和索引子存取 |
x++ |
後置遞增 |
x-- |
後置遞減 |
new T(...) |
建立物件和委派 |
new T(...){...} |
使用初始設定式建立物件。請參閱物件和集合初始設定式 (C# 程式設計手冊)。 |
new {...} |
匿名物件初始設定式。請參閱匿名型別 (C# 程式設計手冊)。 |
new T[...] |
建立陣列請參閱陣列 (C# 程式設計手冊)。 |
typeof(T) |
取得 T 的 System.Type 物件 |
checked(x) |
在核取的內容中評估運算式 |
unchecked(x) |
在未核取的內容中評估運算式 |
default (T) |
取得型別 T 的預設值 |
delegate {} |
匿名函式 (匿名方法) |
一元運算子
運算式 |
說明 |
---|---|
+x |
識別 |
-x |
否定 |
!x |
邏輯否定 |
~x |
位元否定 |
++x |
前置遞增 |
--x |
前置遞減 |
(T)x |
x 明確轉換成型別 T |
乘法類運算子
運算式 |
說明 |
---|---|
乘法 |
|
除法 |
|
餘數 |
加法類運算子
運算式 |
說明 |
---|---|
x + y |
加法、字串串連、委派組合 |
x - y |
減法、委派移除 |
移位運算子
運算式 |
說明 |
---|---|
x << y |
左移 |
x >> y |
右移 |
關係和型別運算子
運算式 |
說明 |
---|---|
x < y |
小於 |
x > y |
大於 |
x <= y |
小於或等於 |
x >= y |
大於或等於 |
x is T |
如果 x 為 T 則傳回 true,否則傳回 false |
x as T |
傳回型別 T 的 x,如果 x 不是 T 則傳回 null |
等號比較運算子
運算式 |
說明 |
---|---|
x == y |
等於 |
x != y |
不相等 |
指派和匿名運算子
運算式 |
說明 |
---|---|
設定 |
|
x op= y |
|
(T x) => y |
匿名函式 (Lambda 運算式) |
邏輯、條件和 Null 運算子
分類 |
運算式 |
說明 |
---|---|---|
邏輯 AND |
x & y |
整數位元 AND、布林邏輯 AND |
邏輯 XOR |
x ^ y |
整數位元 XOR、布林邏輯 XOR |
邏輯 OR |
x | y |
整數位元 OR、布林邏輯 OR |
條件式 AND |
x && y |
只有在 x 為 true 時評估 y |
條件式 OR |
x || y |
只有在 x 為 false 時評估 y |
Null 結合 |
X ??y |
如果 x 為 null,評估 y,否則評估 x |
條件式 |
x ?: y : z |
如果 x 為 true 則評估 y;如果 x 為 false 則評估 z |
當有兩個優先順序相同的運算子出現在同一個運算式中時,會根據順序關聯性評估這兩個運算子。左向關聯運算子會以由左到右的順序進行評估。例如,x * y / z 會被評估為 (x * y) / z。右向關聯運算子會以由右到左的順序進行評估。指派運算子和三元運算子 (?:) 是右向關聯的。所有其他二元運算子都是左向關聯的。
括號可以用來包圍運算式,並強制該運算式較其他運算式先進行評估。例如,2 + 3 * 2 正常會得到 8。這是因為乘法運算子的優先順序較加法運算子為高。將運算式寫成 (2 + 3) * 2 的所得結果會是 10,因為這個運算式會指示 C# 編譯器必須先評估加法運算子 (+),然後再評估乘法運算子 (*)。
您可以為自訂類別和結構變更運算子的行為。這個程序稱為「運算子多載」(Operator Overloading)。如需詳細資訊,請參閱可多載的運算子 (C# 程式設計手冊)。
相關章節
如需詳細資訊,請參閱運算子關鍵字 (C# 參考) 和 C# 運算子。
請參閱
概念
參考
變更記錄
日期 |
記錄 |
原因 |
---|---|---|
2008 年 7 月 |
移除未定義輸出的錯誤相關陳述。 |
資訊加強。 |