Справочник по C#. Операторы присваивания
Оператор = присваивания присваивает значение правого операнда переменной, свойству или элементу индексатора , заданному левой операндом. Результатом выражения присваивания является значение, назначенное расположенному слева операнду. Расположенный справа операнд должен иметь тот же тип, что и операнд слева, либо же допускать неявное преобразование в этот тип.
Оператор присваивания = имеет правую ассоциативность, то есть выражение формы:
a = b = c
a = (b = c)
В следующем примере показано использование оператора присваивания с локальной переменной, свойством и элементом индексатора в качестве левого операнда:
List numbers = [1.0, 2.0, 3.0]; Console.WriteLine(numbers.Capacity); numbers.Capacity = 100; Console.WriteLine(numbers.Capacity); // Output: // 4 // 100 int newFirstElement; double originalFirstElement = numbers[0]; newFirstElement = 5; numbers[0] = newFirstElement; Console.WriteLine(originalFirstElement); Console.WriteLine(numbers[0]); // Output: // 1 // 5
Левый операнд назначения получает значение правого операнда. Если операнды имеют типы значений, назначение копирует содержимое правого операнда. Если операнды имеют ссылочные типы, назначение копирует ссылку на объект.
Это называется назначением значений: присваивается значение.
Назначение ссылок
Назначение = ref Ref делает его левый операнд псевдонимом правой операнда, как показано в следующем примере:
void Display(double[] s) => Console.WriteLine(string.Join(" ", s)); double[] arr = < 0.0, 0.0, 0.0 >; Display(arr); ref double arrayElement = ref arr[0]; arrayElement = 3.0; Display(arr); arrayElement = ref arr[arr.Length - 1]; arrayElement = 5.0; Display(arr); // Output: // 0 0 0 // 3 0 0 // 3 0 5
В предыдущем примере локальная ссылочная переменная arrayElement инициализируется как псевдоним первого элемента массива. Затем он ref переназначется для ссылки на последний элемент массива. Как это псевдоним, при обновлении его значения с помощью обычного оператора = присваивания соответствующий элемент массива также обновляется.
Левый операнд ref назначения может быть локальной ссылочной переменной, ref полем и параметром метода или in методом ref out . Оба операнда должны иметь одинаковый тип.
Составное присваивание
Для бинарного оператора op выражение составного присваивания в форме
x op= y
x = x op y
за исключением того, что x вычисляется только один раз.
Присваивание объединения со значением NULL
Можно использовать оператор ??= присваивания назначения null-mergeescing, чтобы назначить значение правого операнда левой операнда только в том случае, если левый операнд оценивается null . Дополнительные сведения см. в статье Операторы ?? и ??=.
Возможность перегрузки оператора
Определяемый пользователем тип не может перегружать оператор назначения. Однако пользовательский тип может определять неявное преобразование в другой тип. Таким образом, значение пользовательского типа может быть присвоено переменной, свойству или элементу индексатора другого типа. Дополнительные сведения см. в разделе Операторы пользовательского преобразования.
Явная перегрузка составного оператора присваивания для пользовательского типа невозможна. Но если пользовательский тип перегружает бинарный оператор op , существующий оператор op= также будет неявно перегружен.
Спецификация языка C#
Подробные сведения см. в разделе Assignment operators (Операторы присваивания) в спецификации языка C#.
См. также
- справочник по C#
- Операторы и выражения C#
- Ключевое слово ref
- Использование составного присваивания (правила стиля IDE0054 и IDE0074)
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
The .NET documentation is open source. Provide feedback here.
Обратная связь
Отправить и просмотреть отзыв по
Как присвоить значение слова в си шарп
Для хранения данных в программе применяются переменные . Переменная представляет именнованную область памяти, в которой хранится значение определенного типа. Переменная имеет тип, имя и значение. Тип определяет, какого рода информацию может хранить переменная.
Перед использованием любую переменную надо определить. Синтаксис определения переменной выглядит следующим образом:
тип имя_переменной;
Вначале идет тип переменной, потом ее имя. В качестве имени переменной может выступать любое произвольное название, которое удовлетворяет следующим требованиям:
- имя может содержать любые цифры, буквы и символ подчеркивания, при этом первый символ в имени должен быть буквой или символом подчеркивания
- в имени не должно быть знаков пунктуации и пробелов
- имя не может быть ключевым словом языка C#. Таких слов не так много, и при работе в Visual Studio среда разработки подсвечивает ключевые слова синим цветом.
Хотя имя переменой может быть любым, но следует давать переменным описательные имена, которые будут говорить об их предназначении.
Например, определим простейшую переменную:
string name;
В данном случае определена переменная name, которая имеет тип string . то есть переменная представляет строку. Поскольку определение переменной представляет собой инструкцию, то после него ставится точка с запятой.
При этом следует учитывать, что C# является регистрозависимым языком, поэтому следующие два определения переменных будут представлять две разные переменные:
string name; string Name;
После определения переменной можно присвоить некоторое значение:
string name; name = "Tom";
Так как переменная name представляет тип string, то есть строку, то мы можем присвоить ей строку в двойных кавычках. Причем переменной можно присвоить только то значение, которое соответствует ее типу.
В дальнейшем с помощью имени переменной мы сможем обращаться к той области памяти, в которой хранится ее значение.
Также мы можем сразу при определении присвоить переменной значение. Данный прием называется инициализацией:
string name = "Tom";
Отличительной чертой переменных является то, что в программе можно многократно менять их значение. Например, создадим небольшую программу, в которой определим переменную, поменяем ее значение и выведем его на консоль:
string name = "Tom"; // определяем переменную и инициализируем ее Console.WriteLine(name); // Tom name = "Bob"; // меняем значение переменной Console.WriteLine(name); // Bob
Консольный вывод программы:
Tom Bob
Константы
Отличительной особенностью переменных является то, что мы можем изменить их значение в процессе работы программы. Но, кроме того, в C# есть константы. Константа должна быть обязательно инициализирована при определении, и после определения значение константы не может быть изменено
Константы предназначены для описания таких значений, которые не должны изменяться в программе. Для определения констант используется ключевое слово const , которое указывается перед типом константы:
const string NAME = "Tom"; // определяем константу
Так, в данном случае определена константа NAME , которая хранит строку «Tom». Нередко для название констант используется верхний регистр, но это не более чем условность.
При использовании констант надо помнить, что объявить мы их можем только один раз и что к моменту компиляции они должны быть определены. Так, в следующем случае мы получим ошибку, так как константе не присвоено начальное значение:
const string NAME; // ! Ошибка - константа NAME не инициализирована
Кроме того, мы ее не сможем изменить в процессе работы программы:
const string NAME = "Tom"; // определяем константу NAME = "Bob"; // !Ошибка - у констаты нельзя изменить значение
Таким образом, если нам надо хранить в программе некоторые данные, но их не следует изменить, они определяются в виде констант. Если же их можно изменять, то они определяются в виде переменных.
Как присвоить значение слова в си шарп
Операции присвоения устанавливают значение. В операциях присвоения участвуют два операнда, причем левый операнд может представлять только модифицируемое именованное выражение, например, переменную
Как и во многих других языках программирования, в C# имеется базовая операция присваивания = , которая присвоивает значение правого операнда левому операнду:
int number = 23;
Здесь переменной number присваивается число 23. Переменная number представляет левый операнд, которому присваивается значение правого операнда, то есть числа 23.
Также можно выполнять множественно присвоение сразу нескольких переменным одновременно:
int a, b, c; a = b = c = 34;
Стоит отметить, что операции присвоения имеют низкий приоритет. И вначале будет вычисляться значение правого операнда и только потом будет идти присвоение этого значения левому операнду. Например:
int a, b, c; a = b = c = 34 * 2 / 4; // 17
Сначала будет вычисляться выражение 34 * 2 / 4 , затем полученное значение будет присвоено переменным.
Кроме базовой операции присвоения в C# есть еще ряд операций:
- += : присваивание после сложения. Присваивает левому операнду сумму левого и правого операндов: выражение A += B равнозначно выражению A = A + B
- -= : присваивание после вычитания. Присваивает левому операнду разность левого и правого операндов: A -= B эквивалентно A = A — B
- *= : присваивание после умножения. Присваивает левому операнду произведение левого и правого операндов: A *= B эквивалентно A = A * B
- /= : присваивание после деления. Присваивает левому операнду частное левого и правого операндов: A /= B эквивалентно A = A / B
- %= : присваивание после деления по модулю. Присваивает левому операнду остаток от целочисленного деления левого операнда на правый: A %= B эквивалентно A = A % B
- &= : присваивание после поразрядной конъюнкции. Присваивает левому операнду результат поразрядной конъюнкции его битового представления с битовым представлением правого операнда: A &= B эквивалентно A = A & B
- |= : присваивание после поразрядной дизъюнкции. Присваивает левому операнду результат поразрядной дизъюнкции его битового представления с битовым представлением правого операнда: A |= B эквивалентно A = A | B
- ^= : присваивание после операции исключающего ИЛИ. Присваивает левому операнду результат операции исключающего ИЛИ его битового представления с битовым представлением правого операнда: A ^= B эквивалентно A = A ^ B
- >>= : присваивание после сдвига разрядов вправо. Присваивает левому операнду результат сдвига его битового представления вправо на определенное количество разрядов, равное значению правого операнда: A >>= B эквивалентно A = A >> B
Применение операций присвоения:
int a = 10; a += 10; // 20 a -= 4; // 16 a *= 2; // 32 a /= 8; // 4 a >= 2; // 16
Операции присвоения являются правоассоциативными, то есть выполняются справа налево. Например:
int a = 8; int b = 6; int c = a += b -= 5; // 9
В данном случае выполнение выражения будет идти следующим образом:
- b -= 5 (6-5=1)
- a += (b-=5) (8+1 = 9)
- c = (a += (b-=5)) (c = 9)
Оператор присваивания
Казалось бы, что может быть проще оператора присваивания? Есть некоторая переменная, ей нужно присвоить некоторое значение, равное константе, другой переменной, или оно является результатом некоторого вычисления.
Оператор присваивания обозначается одиночным знаком равенства (=).
В C# оператор присваивания действует таким же образом, как и в других языках программирования. Ниже приведена его общая форма:
имя_переменной = выражение;
Здесь имя_переменной должно быть совместимо с типом выражения.
Однако вам полезно знать еще кое-что про этот оператор, чтобы понимать код, написанный другими программистами.
У простого оператора присваивания имеется одна интересная особенность, о которой вам будет полезно знать: он позволяет создавать цепочку операций присваивания.
Рассмотрим следующий фрагмент кода:
int x, у, z;
x = у = z = 10; // присвоить значение 10 переменным x, у и z
В приведенном выше фрагменте кода одно и то же значение 10 задается для переменных х, у и z с помощью единственного оператора присваивания. Это значение присваивается сначала переменной z, затем переменной у и, наконец, переменной х. Такой способ присваивания «по цепочке» удобен для задания общего значения целой группе переменных.
Составные операторы присваивания
В C# предусмотрены специальные составные операторы присваивания, упрощающие программирование некоторых операций присваивания. Обратимся сначала к простому примеру:
x = x + 1;
Его можно переписать следующим образом:
x += 1;
Пара операторов += указывает компилятору на то, что переменной х должно быть присвоено ее первоначальное значение, увеличенное на единицу.
Для многих двоичных операций, то есть операций, требующих наличия двух операндов, существуют отдельные составные операторы присваивания.
Общая форма всех этих операторов имеет следующий вид:
имя переменной op = выражение;
где op — арифметический или логический оператор, применяемый вместе с оператором присваивания.
Ниже перечислены составные операторы присваивания для арифметических и логических операций:
+= : присваивание после сложения. Присваивает левому операнду сумму левого и правого операндов, выражение A += B равнозначно выражению A = A + B ;
-= : присваивание после вычитания. Присваивает левому операнду разность левого и правого операндов, A -= B эквивалентно A = A — B ;
*= : присваивание после умножения. Присваивает левому операнду произведение левого и правого операндов, A*=B эквивалентно A=A*B ;
/= : присваивание после деления. Присваивает левому операнду частное левого и правого операндов, A /= B эквивалентно A = A / B ;
%= : присваивание после деления по модулю. Присваивает левому операнду остаток от целочисленного деления левого операнда на правый, A %= B эквивалентно A = A % B ;
|= : присваивание после поразрядной дизъюнкции. Присваивает левому операнду результат поразрядной дизъюнкции его битового представления с битовым представлением правого операнда, A |= B эквивалентно A = A | B ;
^= : присваивание после операции исключающего ИЛИ. Присваивает левому операнду результат операции исключающего ИЛИ его битового представления с битовым представлением правого операнда, A=A^B ;
>>= : присваивание после сдвига разрядов вправо. Присваивает левому операнду результат сдвига его битового представления вправо на определенное количество разрядов, равное значению правого операнда, A >>= B эквивалентно A = A >> B .
Составные операторы присваивания записываются более кратко, чем их не составные эквиваленты. Поэтому их иногда еще называют укороченными операторами присваивания.
У составных операторов присваивания имеются два главных преимущества. Во-первых, они более компактны, чем их «не сокращенные» эквиваленты. И во-вторых, они дают более эффективный исполняемый код, поскольку левый операнд этих операторов вычисляется только один раз.
Именно по этим причинам составные операторы присваивания чаще всего применяются в программах, профессионально написанных на C#.
Далее познакомимся с понятием «Поразрядные операторы
NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.
