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

Обновлен: Июль 2008

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

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

y++;

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

y = 2 + 3;

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

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

Выражение

Описание

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

Не равно

Операторы назначения и анонимные операторы

Выражение

Описание

=

Присваивание

x op= y

Составные операторы присвоения: +=, -=, *=, /=, %=, &=, |=, !=, <<=, >>=

(T x) => y

Анонимная функция (лямбда-выражение)

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

Категория

Выражение

Описание

Логическое AND

x & y

Целочисленное поразрядное AND, логическое AND

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

x ^ y

Целочисленное поразрядное исключающее XOR, логическое исключающее XOR

Логическое OR

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 * y / z вычисляется как (x * y) / z. Запросы с правой ассоциативностью вычисляются справа налево. Операторы присваивания и третичный оператор (?:) имеют правую ассоциативность. Все прочие двоичные операторы имеют левую ассоциативность.

Можно заключать выражения в скобки для принудительного вычисления некоторых частей выражения раньше других. Например, выражение 2 + 3 * 2 в обычном случае будет иметь значение 8, поскольку операторы умножения выполняются раньше операторов сложения. Результатом выражения (2 + 3) * 2 будет число 10, поскольку компилятор C# получит данные о том, что оператор сложения (+) нужно вычислить до оператора умножения (*).

Поведение операторов для пользовательских классов и структур можно изменить. Такой процесс называется перегрузкой операторов. Дополнительные сведения см. в разделе Перегружаемые операторы (Руководство по программированию в C#).

Разделы по теме

Дополнительные сведения см. в разделах Ключевые слова операторов (справочник по C#) и Операторы C#.

См. также

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

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

Ссылки

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

Журнал изменений

Дата

Журнал изменений

Причина

Июль 2008

Удалено ошибочное выражение о неопределенной выводе.

Улучшение информации.