Оператор присваивания — один из наиболее часто используемых операторов языка. В нем некоторой переменной, описанной выше по тексту программы, присваивается значение выражения, указанного справа от знака равенства. Наличие этого знака и есть признак оператора присваивания. Например:
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.
0 коммент.:
Отправить комментарий