C#指南,重温基础,展望远方!(4)表达式
表达式是在操作数和运算符的基础之上构造而成。 表达式的运算符指明了向操作数应用的运算。 运算符的示例包括 +、-、*、/ 和 new。 操作数的示例包括文本、字段、局部变量和表达式。
如果表达式包含多个运算符,那么运算符的优先级决定了各个运算符的计算顺序。 例如,表达式 x + y * z 相当于计算 x + (y * z),因为 * 运算符的优先级高于 + 运算符。
如果操作数两边的两个运算符的优先级相同,那么运算符的结合性决定了运算的执行顺序:
- 除了赋值运算符之外,所有二元运算符均为左结合运算符,即从左向右执行运算。 例如,
x + y + z将计算为(x + y) + z。 - 赋值运算符和条件运算符 (
?:) 为右结合运算符,即从右向左执行运算。 例如,x = y = z将计算为x = (y = z)。
可以使用括号控制优先级和结合性。 例如,x + y * z 先计算 y 乘 z,并将结果与 x 相加,而 (x + y) * z 则先计算 x 加 y,然后将结果与 z 相乘。
大多数运算符都可以重载。 借助运算符重载,可以为一个或两个操作数为用户定义类或结构类型的运算指定用户定义运算符实现代码。
下面总结了 C# 运算符,按优先级从高到低的顺序列出了各类运算符。 同一类别的运算符的优先级也相同。 每个类别下均列出了相应类别的表达式,以及对每种表达式类型的说明。
- 基本
x.m:成员访问x(...):方法和委托调用x[...]:数组和索引器访问x++:后置递增x--:后置递减new T(...):创建对象和委托new T(...){...}:使用初始值设定项的对象创建new {...}:匿名对象初始值设定项new T[...]:数组创建typeof(T):获取T的 Type 对象checked(x):在已检查的上下文中计算表达式unchecked(x):在未检查的上下文中计算表达式default(T):获取类型为T的默认值delegate {...}:匿名函数(匿名方法)
- 一元
+x:标识-x:取反!x:逻辑取反~x:按位取反++x:前置递增--x:前置递减(T)x:将x显式转换成类型Tawait x:异步等待x完成
- 乘法
x * y:乘法x / y:除法x % y:求余
- 加法
x + y:加法、字符串串联、委托组合x – y:减法、委托删除
- Shift
x << y:左移位x >> y:右移位
- 关系和类型测试
x < y:小于x > y:大于x <= y:小于或等于x >= y:大于或等于x is T:如果x是T,返回true;否则,返回falsex as T:返回类型为T的x;如果x的类型不是T,返回null
- 相等
x == y:等于x != y:不等于
- 逻辑“与”
x & y:整数型位AND,布尔型逻辑 AND
- 逻辑 XOR
x ^ y:整数型位 XOR,布尔型逻辑 XOR
- 逻辑“或”
x | y:整数型位 OR,布尔型逻辑 OR
- 条件“与”
x && y:仅当x不是false时,才计算y
- 条件“或”
x || y:仅当x不是true时,才计算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 表达式)
浙公网安备 33010602011771号