c#编程
完成条件
C# 操作符及其优先级
C# 中的操作符及其优先级与 C 语言家族的其他语言(如 C++)非常相似。类似于 C++,C# 的类可以重载大多数操作符,从而定义或重新定义操作符在特定上下文(如操作符的第一个参数是该类的实例)中的行为。然而,为了代码清晰,通常不建议过多使用操作符重载。
操作符可以根据其元数(参数数量)分为:无参(nullary)、单参(unary)、双参(binary)、三参(ternary)和多参(n-ary)。
以下是 C# 中内置操作符的行为。
算术操作符
以下算术操作符用于数字操作数(表达式中的参数 a
和 b
):
表达式 | 读法 | 元数 | 说明 |
---|---|---|---|
a + b |
a plus b |
二元 | + 返回两个参数的和。 |
a - b |
a minus b |
二元 | - 返回两个参数的差值。 |
a * b |
a times b |
二元 | * 返回两个参数的乘积。 |
a / b |
a divided by b |
二元 | / 返回两个参数的商。如果两个参数都是整数,则执行整数除法(丢弃余数)。 |
a % b |
a mod b |
二元 | % 仅用于整数,返回整数除法的余数。 |
a++ |
a plus plus |
单元 | 后置自增,a++ 将 a 增加 1,返回递增前的值。 |
++a |
plus plus a |
单元 | 前置自增,++a 将 a 增加 1,返回递增后的值。 |
a-- |
a minus minus |
单元 | 后置自减,a-- 将 a 减少 1,返回递减前的值。 |
--a |
minus minus a |
单元 | 前置自减,--a 将 a 减少 1,返回递减后的值。 |
逻辑操作符
以下逻辑操作符用于布尔或整数操作数:
表达式 | 读法 | 元数 | 说明 |
---|---|---|---|
a & b |
a bitwise and b |
二元 | 对操作数逐位求与。布尔操作数则返回逻辑与。 |
a && b |
a and b |
二元 | 对布尔操作数,短路求与:若第一个操作数为 false ,直接返回 false 。 |
`a | b` | a bitwise or b |
二元 |
`a | b` | a or b |
|
a ^ b |
a x-or b |
二元 | 对操作数逐位异或(XOR)。 |
!a |
not a |
单元 | 返回布尔操作数的逻辑非。 |
~a |
bitwise not a |
单元 | 返回整数操作数的逐位取反。 |
位移操作符
表达式 | 读法 | 元数 | 说明 |
---|---|---|---|
a << b |
a left shift b |
二元 | 将 a 左移 b 位,丢弃高位,低位补零。 |
a >> b |
a right shift b |
二元 | 将 a 右移 b 位,丢弃低位,高位补符号位(有符号数)或补零(无符号数)。 |
关系操作符
以下操作符用于关系运算和类型比较:
表达式 | 读法 | 元数 | 说明 |
---|---|---|---|
a == b |
a is equal to b |
二元 | 对值类型,若操作数值相等返回 true ;对字符串类型,若字符序列匹配返回 true ;对引用类型,若引用相同返回 true 。 |
a != b |
a is not equal to b |
二元 | 返回 a == b 的逻辑非。 |
a < b |
a is less than b |
二元 | 若 a 小于 b ,返回 true 。 |
a > b |
a is greater than b |
二元 | 若 a 大于 b ,返回 true 。 |
a <= b |
a is less than or equal to b |
二元 | 若 a 小于等于 b ,返回 true 。 |
a >= b |
a is greater than or equal to
b |
二元 | 若 a 大于等于 b ,返回 true 。 |
赋值操作符
最基本的赋值操作符是 =
,它将第二个参数的值(或引用)赋给第一个参数。因此,赋值操作符是二元的,但也可以形成多元形式。
技术上讲,=
操作符的第一个参数(左侧)必须是一个可以被赋值的表达式(l-value),而第二个参数(右侧)必须是一个可求值的表达式(r-value)。左侧需要是可赋值的表达式,而右侧需要是已绑定的表达式,这是术语 "l-value" 和 "r-value" 的起源。
- 值类型:赋值操作会更改变量的底层值。
- 引用类型:赋值操作会更改引用,使变量指向另一个对象,但原引用指向的对象不会改变(除非被垃圾回收)。
表达式与说明
表达式 | 读法 | 元数 | 说明 |
---|---|---|---|
a = b |
a equals (or set to) b |
二元 | = 计算右侧表达式并将结果赋值给左侧的变量。 |
a = b = c |
b set to c, and then a set to b |
多元 | 相当于 a = (b = c) ,右侧赋值先执行。例如 a = b = c = 0; 等价于 a = 0; b = 0; c = 0; 。 |
简写赋值操作符
简写赋值操作符将常见的赋值操作缩写为更简洁的语法,例如将 a = a + b
简写为 a += b
。
表达式 | 读法 | 元数 | 说明 |
---|---|---|---|
a += b |
a plus equals b |
二元 | 等价于 a = a + b 。 |
a -= b |
a minus equals b |
二元 | 等价于 a = a - b 。 |
a *= b |
a multiply equals b |
二元 | 等价于 a = a * b 。 |
a /= b |
a divide equals b |
二元 | 等价于 a = a / b 。 |
a %= b |
a mod equals b |
二元 | 等价于 a = a % b 。 |
a &= b |
a and equals b |
二元 | 等价于 a = a & b 。 |
`a | = b` | a or equals b |
二元 |
a ^= b |
a xor equals b |
二元 | 等价于 a = a ^ b 。 |
a <<= b |
a left-shift equals b |
二元 | 等价于 a = a << b 。 |
a >>= b |
a right-shift equals b |
二元 | 等价于 a = a >> b 。 |
类型信息操作符
表达式 | 读法 | 元数 | 说明 |
---|---|---|---|
x is T |
is x of type T |
二元 | 如果 x 是类型 T 的实例,返回 true ;否则返回 false 。 |
x as T |
cast x to T |
二元 | 如果 x 是类型 T 的实例,则返回 (T)x ,否则返回 null 。 |
sizeof(x) |
size of x |
单元 | 返回值类型 x 的大小(仅适用于值类型,不适用于引用类型)。 |
typeof(T) |
type of T |
单元 | 返回描述类型 T 的 System.Type 对象。 |
指针操作(不推荐)
大多数 C# 开发者认为直接使用指针不是最佳实践。C# 提供了内置的内存管理机制,直接使用指针会破坏这些机制。使用指针的代码必须在 "unsafe mode" 下编译。
表达式 | 读法 | 元数 | 说明 |
---|---|---|---|
*a |
object at a |
单元 | 间接访问操作符,允许访问指针所指的对象。 |
a->member |
member of a |
二元 | 类似 . 操作符,用于访问指针指向的类或结构体的成员。 |
a[b] |
object at offset b from a |
二元 | 用于索引指针。 |
&a |
reference to a |
单元 | 返回 a 的地址。 |
stackalloc a |
allocate a on the stack |
二元 | 在堆栈上分配内存,而不是堆上。 |
fixed a |
prevent a from being relocated |
二元 | 暂时固定一个变量的位置以获取其地址。 |
溢出控制
表达式 | 读法 | 元数 | 说明 |
---|---|---|---|
checked(a) |
evaluate a and check for
overflow |
单元 | 检查表达式 a 是否发生溢出。 |
unchecked(a) |
evaluate a without checking for
overflow |
单元 | 忽略 a 是否发生溢出,继续计算。 |
其他操作符
表达式 | 读法 | 元数 | 说明 |
---|---|---|---|
a.b |
member b of a |
二元 | 访问 a 的成员 b (字段、方法等)。 |
a[b] |
item b in a |
二元 | 获取数组或集合 a 中索引为 b 的项。 |
(a)b |
cast b to type a |
二元 | 将 b 显式转换为类型 a 。 |
new a |
create a new a |
多元 | 创建类型 a 的新实例并调用其构造函数。 |
a + b |
concatenate string b to a |
二元 | 如果 a 和 b 是字符串,则返回其连接结果。 |
a ? b : c |
if a then b else c |
三元 | 如果 a 为 true ,返回 b ,否则返回 c 。 |
a ?? b |
if a is null then b else a |
二元 | 如果 a 为 null ,返回 b ;否则返回 a 。 |
$"{b}" |
insert b into the string |
多元 | 字符串插值,快速生成包含变量值的字符串(C# 6 起支持)。 |
$@"{b}" |
insert b into verbatim string |
多元 | 将插值和逐字字符串功能结合使用(C# 6 起支持)。 |
最后修改: 2025年01月11日 星期六 21:22