Оператор присвоения (=) сохраняет значение своего правого операнда в месте хранения (переменной) обозначенной в левом операнде. Операнды должны быть одного типа (или правый операнд должен допускать явное преобразование в тип левого операнда).
Но в C# операцию присвоения также можно произвести выполнив дополнительную арифметическую операцию со значением в переменной. Например, что бы не писать следующего операции:
int variable2 = 0;
variable2 = variable2 + 5;
variable2 = variable2 - 5;
variable2 = variable2 * 5;
variable2 = variable2 / 5;
variable2 = variable2 % 5;
их можно написать следующим образом:
int variable2 = 0;
variable2 += 5; // Используется присвоение со сложением.
variable2 -= 5; // Используется присвоение с вычитанием.
variable2 *= 5; // Используется присвоение с умножением.
variable2 /= 5; // Используется присвоение с делением.
variable2 %= 5; // Используется присвоение остатка от деления.
Следует подметить, что «операция присвоения с…» подразумевает, что программисту в выражении справа нет нужды писать имя переменной в которою произойдёт запись результата выражения.
Также выше были наведены простые примеры использования «операций присвоения с…», но они также могут быть более сложными Например, следующее выражение:
variable2 += 5 + 20/5;
будет эквивалентно:
variable2 = variable2 + 5 + 20/5;
Зачастую полную запись выражения называют громоздким решением, а решение использующее «операций присвоения с…» называют элегантным решением.
Кроме этого нужно вспомнить о следующем правиле работы с арифметическими операциями: «Все арифметические операции производимые над двумя значениями типа (byte
, sbyte
, short
, ushort
) в качестве результата, возвращают значение типа int
.» С этого следует, что результат арифметических операций с данными типами нужно преобразовывать:
byte variable1 = 0;
//variable1 = variable1 + 5; // ОШИБКА: Попытка неявного преобразования значения результата, тип int в тип byte.
//variable1 = (byte)variable1 + 5; // ОШИБКА: Происходит преобразование типа byte в тип byte, раньше выполнения операции сложения.
variable1 = (byte)(variable1 + 5); // Громоздкое решение.
variable1 += 5; // Элегантное решение.
//variable1 += 5000; // Ошибка. т.к. значение правой части выражения не должно превышать диапазон допустимых значений типа переменной
Как видно из кода выше «операций присвоения с…» для типов byte
, sbyte
, short
и ushort
также выполняют преобразование результата арифметических операций.
Также было указано ещё одно правило: при использовании «операций присвоения с…» результат правой части выражения не должно превышать диапазон допустимых значений типа переменной.
Источник: видеоурок Александра Шевчука "ВИДЕОУРОК №3. ПЕРЕМЕННЫЕ И ТИПЫ ДАННЫХ"