Операторы (Руководство по программированию на 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#)

Основные понятия

Руководство по программированию на C#