表達式由操作數 (operand) 和運算符 (operator) 構成。表達式的運算符指示對操作數適用什么樣的運算。運算符的示例包括+、-、*、/ 和 new。操作數的示例包括文本、字段、局部變量和表達式。
當表達式包含多個運算符時,運算符的優先級 (precedence) 控制各運算符的計算順序。例如,表達式 x + y * z 按 x + (y * z) 計算,因為 * 運算符的優先級高於 + 運算符。
大多數運算符都可以重載 (overload)。運算符重載允許指定用戶定義的運算符實現來執行運算,這些運算的操作數中至少有一個,甚至所有操作數都屬於用戶定義的類類型或結構類型。
下表總結了 C# 運算符,並按優先級從高到低的順序列出各運算符類別。同一類別中的運算符優先級相同。
類別 |
表達式 |
說明 |
基本 |
x.m |
成員訪問 |
x(...) |
方法和委托調用 |
|
x[...] |
數組和索引器訪問 |
|
x++ |
后增量 |
|
x-- |
后減量 |
|
new T(...) |
對象和委托創建 |
|
new T(...){...} |
使用初始值設定項創建對象 |
|
new {...} |
匿名對象初始值設定項 |
|
new T[...] |
數組創建 |
|
typeof(T) |
獲取 T 的 System.Type 對象 |
|
checked(x) |
在 checked 上下文中計算表達式 |
|
unchecked(x) |
在 unchecked 上下文中計算表達式 |
|
default(T) |
獲取類型 T 的默認值 |
|
delegate {...} |
匿名函數(匿名方法) |
|
一元 |
+x |
恆等 |
-x |
求相反數 |
|
!x |
邏輯求反 |
|
~x |
按位求反 |
|
++x |
前增量 |
|
--x |
前減量 |
|
(T)x |
將 x 顯式轉換為類型 T |
|
await x |
異步等待 x 完成 |
|
乘法 |
x * y |
乘法 |
x / y |
除法 |
|
x % y |
求余 |
加減 |
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 & 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 |
賦值 |
x op= y |
復合賦值;支持的運算符有: *= /= %= += -= <<= >>= &= ^= |= |
|
(T x) => y |
匿名函數(lambda 表達式) |
語句
程序的操作是使用語句 (statement) 來表示的。C# 支持幾種不同的語句,其中許多以嵌入語句的形式定義。
block 用於在只允許使用單個語句的上下文中編寫多條語句。塊由位於一對大括號 { 和 } 之間的語句列表組成。
聲明語句 (declaration statement) 用於聲明局部變量和常量。
表達式語句 (expression statement) 用於對表達式求值。可用作語句的表達式包括方法調用、使用 new 運算符的對象分配、使用 = 和復合賦值運算符的賦值、使用 ++ 和 -- 運算符的增量和減量運算以及 await 表達式。
選擇語句 (selection statement) 用於根據表達式的值從若干個給定的語句中選擇一個來執行。這一組中有 if 和 switch 語句。
迭代語句 (iteration statement) 用於重復執行嵌入語句。這一組中有 while、do、for 和 foreach 語句。
跳轉語句 (jump statement) 用於轉移控制。這一組中有 break、continue、goto、throw、return 和 yield 語句。
try...catch 語句用於捕獲在塊的執行期間發生的異常,try...finally 語句用於指定終止代碼,不管是否發生異常,該代碼都始終要執行。
checked 語句和 unchecked 語句用於控制整型算術運算和轉換的溢出檢查上下文。
lock 語句用於獲取某個給定對象的互斥鎖,執行一個語句,然后釋放該鎖。
using 語句用於獲得一個資源,執行一個語句,然后釋放該資源。
下表列出了 C# 的各語句,並提供每個語句的示例。
語句 |
示例 |
局部變量聲明 |
static void Main() { |
局部常量聲明 |
static void Main() { |
表達式語句 |
static void Main() { |
if語句 |
static void Main(string[] args) { |
switch語句 |
static void Main(string[] args) { |
while語句 |
static void Main(string[] args) { |
do語句 |
static void Main() { |
for語句 |
static void Main(string[] args) { |
foreach語句 |
static void Main(string[] args) { |
break語句 |
static void Main() { |
continue語句 |
static void Main(string[] args) { |
goto語句 |
static void Main(string[] args) { |
return語句 |
static int Add(int a, int b) { static void Main() { |
yield語句 |
static IEnumerable<int> Range(int from, int to) { static void Main() { |
throw 和 try |
static double Divide(double x, double y) { static void Main(string[] args) { |
checked 和 unchecked 語句 |
static void Main() { |
lock語句 |
class Account public void Withdraw(decimal amount) { |
using語句 |
static void Main() { |