Операторы (Руководство по программированию на C#)
В C# оператор — это элемент программы, который применяется к одному или нескольким операндам в выражении или операторе.Операторы, получающие на вход один операнд, например оператор инкремента (++) или new, называются унарными операторами.Операторы, получающие на вход два операнда, например, арифметические операторы (+, -, *, /) называются бинарными.Один оператор — условный оператор (?:) получает на вход три операнда и является единственным троичным оператором в C#.
Следующая строка кода C# содержит один унарный оператор и один операнд.Оператор инкремента ++ изменяет значение операнда y.
y++;
Следующая строка кода C# содержит два бинарных оператора, каждый с двумя операндами.Оператор присвоения = в качестве операндов принимает целочисленную переменную y и выражение 2 + 3.Выражение 2 + 3 само состоит из оператора сложения и два операнда, 2 и 3.
y = 2 + 3;
Операторы, вычисление значения и приоритет операторов
Операнд может быть допустимым выражением любого размера, и он может состоять из любого числа других выражений.В выражении, которое содержит несколько операторов, порядок применения операторов определяется порядком применения операторов, ассоциативностью и скобками.
Каждый оператор имеет определенный приоритет.В выражении, которое содержит несколько операторов с разными уровнями приоритета, порядок применения операторов определяет порядок, в котором вычисляются операторы.Например, следующий оператор присваивает 3 полю n1.
n1 = 11 - 2 * 4;
Умножение выполняется в первую очередь, так как умножение имеет приоритет над вычитанием.
В следующей таблице операторы разделены на категории на основе типа выполняемых операций.Категории указаны в порядке приоритета.
Основные операторы
Выражение |
Описание |
---|---|
x.y |
Доступ к членам |
f(x) |
Вызов метода и делегата |
a[x] |
Доступ к массиву и индексатору |
x++ |
Постфиксное приращение |
x-- |
Постфиксное уменьшение |
new T(...) |
Создание объекта и делегата |
new T(...){...} |
Создание объекта с инициализатором.Дополнительные сведения см. в разделе Инициализаторы объектов и коллекций (Руководство по программированию в C#). |
new {...} |
Анонимный инициализатор объекта.Дополнительные сведения см. в разделе Анонимные типы (Руководство по программированию в C#). |
new T[...] |
Создание массива.Дополнительные сведения см. в разделе Массивы (Руководство по программированию на C#). |
typeof(T) |
Получение объекта System.Type для T |
checked(x) |
Вычисление выражения в проверенном контексте |
unchecked(x) |
Вычисление выражения в непроверенном контексте |
default (T) |
Получение значения по умолчания для типа T |
delegate {} |
Анонимная функция (анонимный метод) |
Унарные операторы
Выражение |
Описание |
---|---|
+x |
Удостоверение |
-x |
Отрицание |
!x |
Логическое отрицание |
~x |
Поразрядное отрицание |
++x |
Префиксное приращение |
--x |
Префиксное уменьшение |
(T)x |
Явное преобразование x в тип T |
Мультипликативные операторы
Выражение |
Описание |
---|---|
Умножение |
|
Деление |
|
Остаток |
Аддитивные операторы
Выражение |
Описание |
---|---|
x + y |
Сложение, объединение строк, объединение делегатов |
x - y |
Вычитание, удаление делегатов |
Операторы сдвига
Выражение |
Описание |
---|---|
x << y |
Сдвиг влево |
x >> y |
Сдвиг вправо |
Операторы отношения и типа
Выражение |
Описание |
---|---|
x < y |
Меньше |
x > y |
Больше |
x <= y |
Меньше или равно |
x >= y |
Больше или равно |
x is T |
Возвращает значение true, если x относится к типу T, в противном случае возвращает значение false |
x as T |
Возвращает x типа T или нулевое значение, если x не относится к типу T |
Операторы равенства
Выражение |
Описание |
---|---|
x == y |
Равно |
x != y |
Не равно |
Логические, условные операторы и Null-операторы
Категория |
Выражение |
Описание |
---|---|---|
Логическое И |
x & y |
Целочисленное поразрядное AND, логическое AND |
Логическое исключающее XOR |
x ^ y |
Целочисленное поразрядное исключающее XOR, логическое исключающее XOR |
Логическое ИЛИ |
x | y |
Целочисленное поразрядное OR, логическое OR |
Условное AND |
x && y |
Вычисляет y только если x имеет значение true |
Условное OR |
x || y |
Вычисляет y только если x имеет значение false |
Объединение нулей |
x ?? y |
Равно y, если x — нулевое, в противном случае равно x |
Условная |
x ?: y : z |
Равно y, если x имеет значение true, z если x имеет значение false |
Операторы назначения и анонимные операторы
Выражение |
Описание |
---|---|
Присваивание |
|
x op= y |
Составное присваивание.Поддерживает следующие операторы: +=, -=, *=, /=, %=, &=, |=, !=, <<=, >>= |
(T x) => y |
Анонимная функция (лямбда-выражение) |
Ассоциативность
Когда выражение содержит два или более операторов с одинаковым порядком применения, они вычисляются на основе ассоциативности.Запросы с левой ассоциативностью вычисляются слева направо.Например, x * y / z вычисляется как (x * y) / z.Запросы с правой ассоциативностью вычисляются справа налево.Например, оператор присваивания является правоассоциативным.Если бы это было не так, следующий код вызвал бы ошибку.
int a, b, c;
c = 1;
// The following two lines are equivalent.
a = b = c;
a = (b = c);
// The following line, which forces left associativity, causes an error.
//(a = b) = c;
Операторы присваивания и троичный оператор (?:) имеют правую ассоциативность.Все прочие двоичные операторы имеют левую ассоциативность.
Независимо от того, используется ли для операторов в выражении левая ассоциация или правая ассоциация, сначала оцениваются операнд каждого выражения — слева направо.Следующие примеры иллюстрируют порядок оценки операторов и операндов.
Оператор |
Порядок вычислений |
---|---|
a = b |
a, b, = |
a = b + c |
a, b, c, +, = |
a = b + c * d |
a, b, c, d, *, +, = |
a = b * c + d |
a, b, c, *, d, +, = |
a = b - c + d |
a, b, c, -, d, +, = |
a += b -= c |
a, b, c, -=, += |
Добавление скобок
Можно изменить порядок, установленный приоритетом и ассоциативностью операторов, воспользовавшись скобками.Например, выражение 2 + 3 * 2 в обычном случае будет иметь значение 8, поскольку операторы умножения выполняются раньше операторов сложения.Однако если выражение записано в форме (2 + 3) * 2, сложение выполняется перед умножением и в результате получается 10.Следующие примеры иллюстрируют порядок оценки выражений в скобках.Как и в предыдущих примерах, операнды вычисляются до того, как применяется оператор.
Оператор |
Порядок вычислений |
---|---|
a = (b + c) * d |
a, b, c, +, d, *, = |
a = b - (c + d) |
a, b, c, d, +, -, = |
a = (b + c) * (d - e) |
a, b, c, +, d, e, -, *, = |
Перегрузка операторов
Поведение операторов для пользовательских классов и структур можно изменить.Такой процесс называется перегрузкой операторов.Дополнительные сведения см. в разделе Перегружаемые операторы (Руководство по программированию в C#).
Связанные разделы
Дополнительные сведения см. в разделах Ключевые слова операторов (Справочник по C#) и Операторы C#.
См. также
Ссылки
Операторы и выражения (Руководство по программированию на C#)