C#赋值操作符和赋值表达式

赋值就是给一个变量赋一个新值。C#中提供的赋值表达式有:

= += -= *= /= %= &= /= ^= <<= >>=

赋值的左操作数必须是一个变量,属性访问器或索引访问器的表达式。
 

C#中可以对变量进行连续赋值,这时赋值操作符是右关联的,这意味着从右向左操作符被分组。例如,形如a=b=c的表达式等价于a=(b=c)。

如果赋值操作符两边的操作数类型不一致,那就先要进行类型转换。

7.3.1 简单赋值

“=”操作符被称为简单赋值操作符。在一个简单赋值中,右操作数必须为某种类型的表达式,且该类型必须可以隐式地转换成左操作数类型。该运算符将右操作数的值赋给作为左操作数的变量、属性或者索引器类型。简单赋值表达式的结果是被赋给左操作数的值。结果类型和左操作数的类型相同,且总是值类型。

7.3.2 复合赋值

形如x op=y的运算可以处理成形如x op y的二进制操作符重载方法。比如:

x+=5; //等于x=x+5

x%=3; //等于x=x%3

x*=y+1; //等于x=x*(y+1)

复合赋值进行的步骤如下:

(1)如果所选操作符的返回类型可以隐式转换成x的数据类型,执行x=x op y的运算,除此之外,仅对x执行一次运算。

(2)否则,所选操作符是一个预定义操作符,所选操作符的返回值类型可以显式地转换成x的类型,且y可以隐式地转换成x的类型,那么该运算等价于x=(T)(x op y)运算,这里T是x的类型,除此之外,x仅被执行一次。

(3)否则,复合赋值是无效的,且会产生编译时错误。

时间: 2024-11-02 05:57:01

C#赋值操作符和赋值表达式的相关文章

《C++面向对象高效编程(第2版)》——3.4 赋值操作符

3.4 赋值操作符 C++面向对象高效编程(第2版) 现在,让我们分析main程序中的语句: a = b ; // 将一个栈赋值给另一个栈 在该语句中,我们将对象b赋值给对象a,使用赋值操作符完成赋值操作.如果a和b都是简单的整数,无论a中的值是什么,编译器都会用b中的值将其擦写(overwrite).就是这么简单.但是在该例中,a和b都是我们创建的对象,这意味着由我们负责赋值操作.我们知道TIntStack类对象之间如何进行赋值,并且能够实现赋值操作符.对于任何赋值操作符,都应注意以下几点:

PHP中=赋值操作符对不同数据类型的不同行为_php技巧

首先解释赋值操作符=的行为,看下面的例子: 复制代码 代码如下: $i = 0; $j = $i; $j = 0; echo $j; // 打印输出0 $arr = array(0); $arr2 = $arr; $arr2[0] = 1; echo $arr[0]; //打印输出0 class B { public $i = 0; } $b = new B(); $c = $b; $c->i = 1; echo($b->i); // 打印输出1 从这个例子可以看出,如果=操作符右边的变量为基

VC#2005快速入门之复合赋值操作符

快速入门 前面讲过如何使用算术操作符来创建新值.例如,以下语句使用操作符+来创建比变量answer大42的一个值,新值将写入控制台: Console.WriteLine(answer + 42); 前面还讲过如何使用赋值语句来更改一个变量的值.以下语句使用赋值操作符将answer的值变成42: answer = 42; 如果希望在一个变量的值上加42,可以将赋值操作符与加法操作符合并到一起.例如,以下语句在answer上加42,并将新值赋给answer.换言之,在运行该语句之后,answer的值

c++的问题-c++primer 第四版:在书店程序中,我们使用了加法操作符而不是复合赋值操作符

问题描述 c++primer 第四版:在书店程序中,我们使用了加法操作符而不是复合赋值操作符 c++primer 第四版:在书店程序中,我们使用了加法操作符而不是复合赋值操 作符将 trans 加到 total 中,为什么我们不使用复合赋 值操作符? 解决方案 先把代码贴出来看,我只看过C++ Primer Plus(第五版).

C++中复制构造函数和重载赋值操作符总结_C 语言

前言 这篇文章将对C++中复制构造函数和重载赋值操作符进行总结,包括以下内容: 1.复制构造函数和重载赋值操作符的定义: 2.复制构造函数和重载赋值操作符的调用时机: 3.复制构造函数和重载赋值操作符的实现要点: 4.复制构造函数的一些细节. 复制构造函数和重载赋值操作符的定义 我们都知道,在C++中建立一个类,这个类中肯定会包括构造函数.析构函数.复制构造函数和重载赋值操作:即使在你没有明确定义的情况下,编译器也会给你生成这样的四个函数.例如以下类: 复制代码 代码如下: class CTes

C++编程规范之27:使用算术操作符和赋值操作符的标准形式

摘要:     如果要定义a+b,也应该定义a+=b:在定义二元算术操作符时,也应该提供操作符的赋值形式,并且应该尽量减少重复,提高效率. 一般而言,对于某个二元操作符@(可能是+.-.*等),应该定义其赋值形式,使用a@=b和a=a@b具有相同的含义(只不过第一种形式可能更高效,它只计算一次a).实现这一目标的标准方法是用@=来定义@,如下所示: T&T::operator@=(const T&) { //......具体的实现代码...... return *this; } Toper

php 传值赋值与引用赋值的区别_php技巧

传值赋值:当将一个表达式的值赋予一个变量时,整个原始表达式的值被赋予到目标变量.这意味着,例如,当一个变量的值赋予另一个变量时,改变其中一个变量的值,将不会影响到另一个变量. 复制代码 代码如下: <?php <?php $a=123; $a=123; $b=$a; $b=&$a; $a=321; $a=321; Echo"$a,$b";//显示"321,123" Echo"$a,$b";//显示"321,321&q

php 赋值和引用赋值使用说明

1.值赋值:将赋值表达式的值复制到变量.例子:  代码如下 复制代码 $number=15; $age=20; $sum=12+"15";//$sum=27 2.创建数组有变量赋值和调用函数两种方法,这里先讲前者. 使用变量赋值方法很简单,直接给一个数组变量赋值即可. 实例:  代码如下 复制代码  <?php  $lang[]="php";  $lang[]="html";  $lang[]="css";  echo

sql语句优化 传参-SQL语句传参赋值与直接赋值,为什么速度差那么远?

问题描述 SQL语句传参赋值与直接赋值,为什么速度差那么远? 传参的花了我30秒 直接赋值的花了不到一秒 求各位大神帮个忙解答一下,这条SQL语句必须要传参的,因为有很多不同的参数值,要怎么优化才好啊