21.&&运算符
条件“与”运算符(&&)执行其bool操作数的逻辑“与”运算,但仅在必要时才计算第二个操作数。操作:x&&y。
如果x为false,则不计算y(因为无论y为何值,“与”操作的结果都为false)。这被称为“短路”计算。
不能重载条件“与”运算符,但常规逻辑运算符和运算符true与false的重载,在某些限制条件下也被视为条件逻辑运算符的重载。
22.||运算符
条件“或”运算符(||)执行bool操作数的逻辑“或”运算,但仅在必要时才计算第二个操作数。操作:x||y。
如果x为true,则不计算y(因为不论y为何值,“或”操作的结果都为true)。这被称为“短路”计算。
不能重载条件“或”运算符,但常规逻辑运算符和运算符true与false的重载,在某些限制条件下也被视为条件逻辑运算符的重载。
23.左移运算符
左移运算符(<<)将第一个操作数向左移第二个操作数指定的位数。第二个操作数类型必须是int。
如果第一个操作数是int或uint(32位数),则移位数由第二个操作数的低5位给出。
如果第一个操作数是long或ulong(64位),则移位数由第二个操作数的低6位给出。
第一操作数的高序位被放弃,低序位用0填充。移位操作从不导致溢出。
用户定义的类型可重载<<运算符,第一个操作数必须为用户定义的类型,第二个操作数必须为int。重载二元运算符时,也会隐式重载相应的赋值运算符(如果有)。
24.>>运算符
右移运算符将第一个操作数向右移动第二个操作数所指定的位数。类似<<,不再详细介绍。
如果第一个操作数为int或uint(32位数),则移位数由第二个操作数的低五位给出(第二个操作数&0x1f)。
如果第一个操作数为long或ulong(64位数),则移位数有第二个操作数的低六位给出(第二个操作数&0x3f)。
如果第一个操作数为int或long,则右移位是算术移位(高序空设置为符号位)。如果第一个操作数为uint或ulong,则右移位是逻辑移位(高位填充0)。
25.==运算符
对于预定义的值类型,如果操作数的值相等,则相等运算符返回true,否则返回false。对于string以外的应用类型,如果两个操作数引用同一个对象,则==返回true。对于string类型,==比较字符串的值。
26.!=运算符
如果操作数相等,则不等运算符(!=)返回false,否则返回true。为所有类型(包括字符串和对象)预定义了不等运算符。用户定义类型可重载!=运算符。
对于预定义值类型,判断值,string以外的引用类型判断引用是否同一个对象,string类型则判断字符串的值。
27.<=运算符
所有数值和枚举类型都定义了“小于等于”关系运算符(<=),如果第一个操作数小于或等于第二个操作数,则该运算符将返回true,否则返回false。用户定义的类型可重载<=运算符。
28.>=运算符
所有数值类型和枚举类型都定义“大于等于”关系运算符>=,如果第一个操作数大于或等于第二个操作数,该运算符返回true,否则返回false。用户定义的类型可重载>=运算符。
29.+=运算符
加法赋值运算符,使用+=赋值运算符的表达式,例如x+=y等效于x=x+y,不同的是x只计算一次。+运算符的含义取决于x和y的类型(对于数值操作数,其含义为相加;对于字符串操作数,其含义为串联)。不能直接重载+=运算符,但用户定义的类型可以重载+运算符。
+=运算符还用于指定响应事件时要调用的方法,这类方法称为事件处理程序。因为事件处理程序封装在委托类型中,所以在此上下文中使用+=运算符称为“串联委托”。
30.-=运算符
减法赋值运算符,使用-=赋值运算符的表达式如x-=y等效于x=x-y,不同的是x只计算一次。运算符的含义取决于x和y的类型(例如,对于数值操作数,其含义为相减;对于委托操作数,其含义为移除)。
31.*=运算符
乘法赋值运算符,使用*=运算符的表达式x *= y等效于x = x * y,不同的是x只计算一次。
32./=运算符
除法赋值运算符,使用/=运算符的表达式x /= y等效于x = x / y,不同的是x只计算一次。
33.%/运算符
模块赋值运算符,使用%=运算符的表达式x %= y等效于x = x% y,不同的是x只计算一次。
34.&=运算符
“与”赋值运算符,使用&=运算符的表达式x &= y等效于x = x & y,不同的是x只计算一次。
35.|=运算符
“或”赋值运算符,使用|=运算符的表达式x |= y等效于x = x | y,不同的是x只计算一次。
36.^=运算符
“异或”赋值运算符,使用^=运算符的表达式x ^= y等效于x = x ^ y,不同的是x只计算一次。
37.<<=运算符
左移赋值运算符,使用<<=运算符的表达式x <<= y等效于x = x << y,不同的是x只计算一次。
38.>>= 运算符
右移赋值运算符,使用>>=运算符的表达式x >>= y等效于x = x >> y,不同的是x只计算一次。
39.->运算符
->运算符将指针取消引用或成员访问组合在一起。x->y(其中x为T*类型的指针,y为T的成员)等效于(*x).y
->运算符只能在非托管代码中使用,不能重载->运算符。
40.??运算符
如果??运算符的左边操作数非空,该运算符将返回左操作数,否则返回右操作数。可空类型可以包含值,或者可以是未定义的。?? 运算符定义当可空类型分配给非可空类型时返回的默认值。如果在将可空类型分配给非可空类型时不使用 ?? 运算符,将生成编译时错误。如果使用强制转换,并且当前未定义可空类型,将发生 InvalidOperationException 异常。