Оператор присваивания

Оператор присваивания — один из наиболее часто используемых операторов языка. В нем некоторой переменной, описанной выше по тексту программы, присваивается значение выражения, указанного справа от знака равенства. Наличие этого знака и есть признак оператора присваивания. Например:

int I = 1; // Описание переменной с одновременным присваиванием ей значения

I = I + I; // Присвавание переменной нового значения

Важной особенностью оператора является требование обязательной совместимости типов переменной и выражения, то есть левых и правых частей оператора. О совместимости типов рассказывается в разделе «Совместимость и приведение типов» главы 5.

В С#, помимо развернутой формы оператора присваивания, допускается также сокращенная форма. Например:

I = I + 1; // Развернутая форма

I += 1; // Сокращенная форма

Сокращенная форма используется только в том случае, когда новое значение переменной является модификацией ее старого значения, то есть если присваиваемое значение определяется бинарной операцией, в которой первый операнд — сама переменная. Разрешаются следующие сокращенные формы:

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

Сокращенными формами не следует злоупотреблять: помимо очевидной меньшей наглядности, эти формы таят в себе определенную опасность. Действительно, рассмотрим такой фрагмент кода:

byte b = 0;

b = b + 1; // Ошибка обнаруживается компилятором

b += 1; // Возможно переполнение, но компилятор молчит

В развернутой форме невинный на первый взгляд оператор присваивания блокируется компилятором, так как обычные математические операции сложения, вычитания и т. п. не определены над целочисленными операндами byte, short, word и т. д., то есть не могут применяться к выражениям, мощность типа которых менее мощности System.Int32. Связано это с возможным переполнением результата, поэтому компилятор требует явного приведения типов, то есть осознанности действий программиста. В краткой форме такой контроль не производится, в результате это может привести к трудно обнаруживаемым ошибкам периода исполнения программы.

В языке С# разрешено множественное присваивание:

int x, y, z, u = 1, v = 2, w = 4;

x = y = z = w = u + v + w;

При множественном присваивании сначала вычисляется значение выражения, стоящего за последним символом равенства, а затем осуществляется последовательное присваивание этого значения всем переменным справа налево, начиная с последней переменной. Заметьте, хотя выражение может зависеть от переменных в списке присваивания, оно вычисляется лишь один раз. В нашем случае выражение зависит от переменной w, которой первой присваивается новое значение, но все переменные получат одно и то же значение 7.

Предлагаю ознакомиться с аналогичными статьями: