Операторы (руководство по программированию на 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 |
Удалено ошибочное выражение о неопределенной выводе. |
Улучшение информации. |