C#赋值运算符之复合赋值运算符

开发 后端
C#赋值运算符之复合赋值运算符是什么呢?C#赋值运算符之复合赋值运算符在使用的情况如何呢?那么本文就向你介绍这方面的内容。

C#赋值运算符之复合赋值运算符的使用:

x op= y 形式的运算是这样来处理的:先将二元运算符重载决策应用于运算 x op y。然后,

如果选定的运算符的返回类型可“隐式”转换为 x 的类型,则运算按 x = x op y 计算,但 x 只计算一次。
 
否则,如果选定运算符是预定义的运算符,选定运算符的返回类型可“显式”转换为 x 的类型,并且 y 可“隐式”转换为 x 的类型,则运算按 x = (T)(x op y) 计算(其中 T 是 x 的类型),但 x 只计算一次。

否则,复合赋值无效,且发生编译时错误。

C#赋值运算符之复合赋值运算符使用遇到的问题:

术语“只计算一次”表示:在 x op y 的计算中,任何 x 的要素表达式的计算结果都临时保存起来,然后在执行对 x 的赋值时重用这些结果。例如,在计算赋值 A()[B()] += C() 时(其中 A 为返回 int[] 的方法,B 和 C 为返回 int 的方法),按 A、B、C 的顺序只调用一次这些方法。

当复合赋值的左操作数为属性访问或索引器访问时,属性或索引器必须同时具有 get 访问器和 set 访问器。如果不是这样,则发生编译时错误。

上面的第二条规则允许在某些上下文中将 x op= y 按 x = (T)(x op y) 计算。按此规则,当左操作数为 sbyte、byte、short、ushort 或 char 类型时,预定义的运算符可用来构造复合运算符。甚至当两个参数都为这些类型之一时,预定义的运算符也产生 int 类型的结果.因此,不进行强制转换,就不可能把结果赋值给左操作数。

C#赋值运算符之复合赋值运算符使用的实例操作:

此规则对预定义运算符的直观效果只是:如果同时允许 x op y 和 x = y,则允许 x op= y。在下面的示例中,

  1. byte b = 0;  
  2. char ch = '\0';  
  3. int i = 0;  
  4. b += 1;            // Ok  
  5. b += 1000;         // Error, b = 1000 not permitted  
  6. b += i;            // Error, b = i not permitted  
  7. b += (byte)i;      // Ok  
  8. ch += 1;            // Error, ch = 1 not permitted  
  9. ch += (char)1;      // Ok 

每个错误的直观理由是对应的简单赋值也发生错误。

C#赋值运算符之复合赋值运算符的相关内容就向你介绍到这里,希望对你学习C#赋值运算符之复合赋值运算符有所帮助。

【编辑推荐】

  1. C#关系运算符简介
  2. C#逻辑运算符简介
  3. C#条件运算符简介
  4. C#移位运算符简介
  5. C#赋值运算符之简单赋值运算符
责任编辑:仲衡 来源: 百度空间
相关推荐

2009-08-12 15:02:49

C#赋值运算符简单赋值运算符

2009-08-11 15:51:08

C#运算符算术运算符

2011-07-15 01:34:36

C++重载运算符

2009-08-12 09:30:10

C#??运算符

2009-08-12 14:49:33

C#移位运算符

2009-09-01 10:08:57

C#运算符

2009-08-12 13:35:22

C#关系运算符

2009-08-12 14:29:32

C#条件运算符

2009-08-11 14:16:38

C# New运算符

2009-08-12 10:47:03

C#运算符重载

2020-10-15 08:11:56

JavaScript逻辑运算符

2009-08-12 14:23:09

C#逻辑运算符

2009-09-04 13:18:10

C#允许运算符重载

2009-08-12 10:56:47

C#运算符重载C#运算符重载实例

2009-08-12 10:07:51

C#运算符

2009-08-12 10:27:12

C#运算符重载运算符重载实例

2009-08-14 10:16:57

C#运算符重载

2009-08-12 13:07:13

C#运算符优先级

2009-08-11 16:03:13

C#运算符

2009-08-12 12:46:11

C#运算符重载
点赞
收藏

51CTO技术栈公众号