Поделиться через


Операторы (Руководство по программированию на C#)

В языке C# оператор — это элемент программы, который применяется для одного или нескольких операндов в выражении или инструкции. Операторы, в которых используется один операнд, например оператор инкремента (++) или new, называются унарными. Операторы, в которых используются два операнда, например арифметические операторы (+,-,*,/), называются бинарными. Для одного оператора — условного (?:) — используются три операнда, и такой оператор является единственным троичным оператором в C#.

Следующая строка кода C# содержит один унарный оператор и еще один операнд. Оператор инкремента ++ изменяет значение операнда y.

y++;

Следующая строка кода C# содержит два бинарных оператора с двумя операндами в каждом. Оператор присваивания = содержит в качестве операндов целочисленную переменную y и выражение 2 + 3. Выражение 2 + 3 состоит из оператора сложения и двух операндов — 2 и 3.

y = 2 + 3;

Операторы, вычисление выражений и приоритет операторов

Операнд может быть допустимым выражением, представляющим собой код любой длины, а также может содержать любое число вложенных выражений. В выражении, содержащем несколько операторов, порядок применения операторов определяется приоритетом операторов, ассоциативностью и скобками.

Каждый оператор имеет определенный приоритет. В выражении, содержащем несколько операторов с разными уровнями приоритета, порядок вычисления операторов определяется их приоритетом. Например, в следующем операторе переменной n1 присваивается значение 3.

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 или значение NULL, если x не относится к типу T

Операторы равенства

Выражение

Описание

x == y

Равно

x != y

Не равно

Логические, условные операторы и NULL-операторы

Категория

Выражение

Описание

Логическое И

x & y

Поразрядное И для операндов целочисленного типа, логическое И для операндов логического типа

Логическое исключающее ИЛИ

x ^ y

Поразрядное исключающее ИЛИ для операндов целочисленного типа, логическое исключающее ИЛИ для операндов логического типа

Логическое ИЛИ

x | y

Поразрядное ИЛИ для операндов целочисленного типа, логическое ИЛИ для операндов логического типа

Условное И

x && y

Равно y, только если x имеет значение true

Условное ИЛИ

x || y

Равно y, только если x имеет значение false

Объединение со значением NULL

x ?? y

Равно y, если x имеет значение NULL, в противном случае равно 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#