C# 语言规范 表达式
时间:2011-01-10 来源:zhanqi
表达式由操作数 (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 |
|
乘法 |
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 |
不等于 |
|
逻辑 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 |
赋值 |
x op= y |
复合赋值;支持的运算符有: *= /= %= += -= <<= >>= &= ^= |= |
|
(T x) => y |
匿名函数(lambda 表达式) |