Операторы C# (справочник по C#)C# operators (C# reference)

C# предоставляет ряд стандартных операторов, поддерживаемых встроенными типами.C# provides a number of predefined operators supported by the built-in types. Например арифметические операторы выполняют арифметические операции с операндами встроенных числовых типов, а логические операторы выполняют логические операции с операндами bool.For example, arithmetic operators perform arithmetic operations with operands of built-in numeric types and Boolean logical operators perform logical operations with the bool operands.

Определяемый пользователем тип может перегружать некоторые операторы для определения соответствующего поведения операндов этого типа.A user-defined type can overload certain operators to define the corresponding behavior for the operands of that type. Для получения дополнительной информации см. раздел Перегрузка операторов.For more information, see Operator overloading.

В следующих разделах перечислены операторы C# в порядке убывания приоритета.The following sections list the C# operators starting with the highest precedence to the lowest. Операторы в каждом разделе совместно используют один и тот же уровень приоритета.The operators within each section share the same precedence level.

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

Это операторы с наивысшим приоритетом.These are the highest precedence operators.

x.y — доступ к членам.x.y – member access.

x?.y — доступ к членам с проверкой NULL.x?.y – null conditional member access. Возвращает значение null, если левый операнд имеет значение null.Returns null if the left-hand operand evaluates to null.

x?[y] — условный доступ к элементу массива или индексатору типов со значением NULL.x?[y] - null conditional array element or type indexer access. Возвращает значение null, если левый операнд имеет значение null.Returns null if the left-hand operand evaluates to null.

f(x) — вызов метода или делегата.f(x) – method call or delegate invocation.

[x]  — доступ к элементу массива или индексатору типов.a[x] – array element or type indexer access.

x++ — постфиксный инкремент.x++ – postfix increment. Возвращает значение x и затем обновляет расположение хранения значением x, которое увеличено на единицу (обычно добавляется целочисленное значение 1).Returns the value of x and then updates the storage location with the value of x that is one greater (typically adds the integer 1).

x-- — постфиксный декремент.x-- – postfix decrement. Возвращает значение x и затем обновляет расположение хранения значением x, которое уменьшено на единицу (обычно вычитается целочисленное значение 1).Returns the value of x and then updates the storage location with the value of x that is one less (typically subtracts the integer 1).

new – создание экземпляра типа.new – type instantiation.

typeof — возвращает объект Type, представляющий операнд.typeof – returns the Type object representing the operand.

checked — включает проверку на переполнение при выполнении операций с целыми числами.checked – enables overflow checking for integer operations.

unchecked — отключает проверку на переполнение при выполнении операций с целыми числами.unchecked – disables overflow checking for integer operations. Это поведение установлено для компилятора по умолчанию.This is the default compiler behavior.

default(T) — создает значение типа T по умолчанию.default(T) – produces the default value of type T.

nameof — используется для получения простого (неполного) имени переменной, типа или члена в виде строковой константы.nameof - obtains the simple (unqualified) name of a variable, type, or member as a constant string.

delegate — объявляет и возвращает экземпляр делегата.delegate – declares and returns a delegate instance.

sizeof — возвращает размер в байтах для типа операнда.sizeof – returns the size in bytes of the type operand.

stackalloc — выделяет блок памяти в стеке.stackalloc - allocates a block of memory on the stack.

-> — косвенное обращение к указателю в сочетании с доступом к члену.-> – pointer indirection combined with member access.

Унарные операторыUnary operators

Эти операторы имеют более высокий приоритет по сравнению со следующим разделом и более низкий приоритет по сравнению с предыдущим.These operators have higher precedence than the next section and lower precedence than the previous section.

+x — возвращает значение x.+x – returns the value of x.

-x — числовое отрицание.-x – numeric negation.

!x — логическое отрицание.!x – logical negation.

~x — поразрядное дополнение.~x – bitwise complement.

++x — префиксный инкремент.++x – prefix increment. Возвращает значение x после обновления расположения хранения значением x, которое увеличено на единицу (обычно добавляется целочисленное значение 1).Returns the value of x after updating the storage location with the value of x that is one greater (typically adds the integer 1).

--x — префиксный декремент.--x – prefix decrement. Возвращает значение x после обновления расположения хранения значением x, которое уменьшено на единицу (обычно вычитается целочисленное значение 1).Returns the value of x after updating the storage location with the value of x that is one less (typically subtracts the integer 1).

(T)x — приведение типов.(T)x – type casting.

awaitTask — ожидание выполнения .await – awaits a Task.

&x — адрес переменной.&x – address of a variable.

*x — косвенное обращение к указателю или разыменование.*x – pointer indirection, or dereference.

Оператор true — возвращает логическое значение true, указывая, что операнд имеет значение true.true operator - returns the bool value true to indicate that an operand is definitely true.

Оператор false — возвращает логическое значение true, указывая, что операнд имеет значение false.false operator - returns the bool value true to indicate that an operand is definitely false.

Мультипликативные операторыMultiplicative operators

Эти операторы имеют более высокий приоритет по сравнению со следующим разделом и более низкий приоритет по сравнению с предыдущим.These operators have higher precedence than the next section and lower precedence than the previous section.

x * y — умножение.x * y – multiplication.

x / y — деление.x / y – division. Если операнды имеют целые числа, результатом является целочисленное значение, усеченное в сторону нуля (например, -7 / 2 is -3).If the operands are integers, the result is an integer truncated toward zero (for example, -7 / 2 is -3).

x % y — остаток.x % y – remainder. Если операнды имеют целые числа, это возвращает остаток от деления x на y.If the operands are integers, this returns the remainder of dividing x by y. Если q = x / y и r = x % y, то x = q * y + r.If q = x / y and r = x % y, then x = q * y + r.

Аддитивные операторыAdditive operators

Эти операторы имеют более высокий приоритет по сравнению со следующим разделом и более низкий приоритет по сравнению с предыдущим.These operators have higher precedence than the next section and lower precedence than the previous section.

x + y — сложение.x + y – addition.

x – y — вычитание.x – y – subtraction.

Операторы сдвигаShift operators

Эти операторы имеют более высокий приоритет по сравнению со следующим разделом и более низкий приоритет по сравнению с предыдущим.These operators have higher precedence than the next section and lower precedence than the previous section.

x << y — сдвиг битов влево и заполнение правого бита нулем.x << y – shift bits left and fill with zero on the right.

x >> y — сдвиг битов вправо.x >> y – shift bits right. Если левым операндом является int или long, затем левые биты заполняются битом знака.If the left operand is int or long, then left bits are filled with the sign bit. Если левым операндом является uint или ulong, затем левые биты заполняются нулем.If the left operand is uint or ulong, then left bits are filled with zero.

Относительные операторы и операторы тестирования типаRelational and type-testing operators

Эти операторы имеют более высокий приоритет по сравнению со следующим разделом и более низкий приоритет по сравнению с предыдущим.These operators have higher precedence than the next section and lower precedence than the previous section.

x < y — меньше чем (возвращает true, если x меньше y).x < y – less than (true if x is less than y).

x > — больше чем (возвращает true, если x больше y).x > y – greater than (true if x is greater than y).

x <= y – меньше или равноx <= y – less than or equal to.

x >= y – больше или равно.x >= y – greater than or equal to.

is — совместимость типов.is – type compatibility. Возвращает значение true, если вычисленный левый операнд может быть приведен к типу, заданному правым операндом.Returns true if the evaluated left operand can be cast to the type specified by the right operand.

as — преобразование типов.as – type conversion. Возвращает левый операнд, приведенный к типу, заданному правым операндом, но as возвращает null, где (T)x вызывает исключение.Returns the left operand cast to the type specified by the right operand, but as returns null where (T)x would throw an exception.

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

Эти операторы имеют более высокий приоритет по сравнению со следующим разделом и более низкий приоритет по сравнению с предыдущим.These operators have higher precedence than the next section and lower precedence than the previous section.

x == y — тождество.x == y – equality. По умолчанию для ссылочных типов, отличных от string, этот оператор возвращает равенство ссылок (проверка удостоверения).By default, for reference types other than string, this returns reference equality (identity test). Однако типы могут перегрузить ==, поэтому если планируется проверять удостоверения, лучше использовать метод ReferenceEquals для object.However, types can overload ==, so if your intent is to test identity, it is best to use the ReferenceEquals method on object.

x != y — неравенство.x != y – not equal. См. примечание для ==.See comment for ==. Если тип перегружает ==, то его необходимо перегрузить !=.If a type overloads ==, then it must overload !=.

Логический оператор ANDLogical AND operator

Этот оператор имеет более высокий приоритет по сравнению со следующим разделом и более низкий приоритет по сравнению с предыдущим.This operator has higher precedence than the next section and lower precedence than the previous section.

x & y — логическое И для операндов bool или побитовое логическое И для операндов целочисленных типов.x & ylogical AND for the bool operands or bitwise logical AND for the operands of the integral types.

Оператор логического исключающего ИЛИLogical XOR operator

Этот оператор имеет более высокий приоритет по сравнению со следующим разделом и более низкий приоритет по сравнению с предыдущим.This operator has higher precedence than the next section and lower precedence than the previous section.

x ^ y — логическое исключающее ИЛИ для операндов bool или побитовое логическое исключающее ИЛИ для операндов целочисленных типов.x ^ ylogical XOR for the bool operands or bitwise logical XOR for the operands of the integral types.

Логический оператор ИЛИLogical OR operator

Этот оператор имеет более высокий приоритет по сравнению со следующим разделом и более низкий приоритет по сравнению с предыдущим.This operator has higher precedence than the next section and lower precedence than the previous section.

x | y — логическое ИЛИ для операндов bool или побитовое логическое ИЛИ для операндов целочисленных типов.x | ylogical OR for the bool operands or bitwise logical OR for the operands of the integral types.

Условный оператор ИConditional AND operator

Этот оператор имеет более высокий приоритет по сравнению со следующим разделом и более низкий приоритет по сравнению с предыдущим.This operator has higher precedence than the next section and lower precedence than the previous section.

x && y — логическое И.x && y – logical AND. Если x имеет значение false, тогда y не вычисляется.If x evaluates to false, then y is not evaluated.

Условный оператор ИЛИConditional OR operator

Этот оператор имеет более высокий приоритет по сравнению со следующим разделом и более низкий приоритет по сравнению с предыдущим.This operator has higher precedence than the next section and lower precedence than the previous section.

x || y — логическое ИЛИ.x || y – logical OR. Если x имеет значение true, тогда y не вычисляется.If x evaluates to true, then y is not evaluated.

Оператор объединения с NULLNull-coalescing operator

Этот оператор имеет более высокий приоритет по сравнению со следующим разделом и более низкий приоритет по сравнению с предыдущим.This operator has higher precedence than the next section and lower precedence than the previous section.

x ?? y — возвращает x, если значение отличается от null; в противном случае возвращает y.x ?? y – returns x if it is non-null; otherwise, returns y.

Условный операторConditional operator

Этот оператор имеет более высокий приоритет по сравнению со следующим разделом и более низкий приоритет по сравнению с предыдущим.This operator has higher precedence than the next section and lower precedence than the previous section.

t ? x : y — если условие t имеет значение true, вычисляет и возвращает x, в противном случае вычисляет и возвращает y.t ? x : y – if test t evaluates to true, then evaluate and return x; otherwise, evaluate and return y.

Операторы назначения и лямбда-операторыAssignment and lambda operators

Эти операторы имеют более высокий приоритет по сравнению со следующим разделом и более низкий приоритет по сравнению с предыдущим.These operators have higher precedence than the next section and lower precedence than the previous section.

x = y — назначение.x = y – assignment.

x += y — инкремент.x += y – increment. Добавьте значение y к значению x, сохраните результат в x и возвратите новое значение.Add the value of y to the value of x, store the result in x, and return the new value. Если x назначает событие, то y должен быть соответствующим методом, который C# добавляет в качестве обработчика событий.If x designates an event, then y must be an appropriate method that C# adds as an event handler.

x -= y — декремент.x -= y – decrement. Вычтите значение y из значения x, сохраните результат в x и возвратите новое значение.Subtract the value of y from the value of x, store the result in x, and return the new value. Если x назначает событие, то y должен быть соответствующим методом, который C# удаляет в качестве обработчика событий.If x designates an event, then y must be an appropriate method that C# removes as an event handler.

x *= y — назначение с умножением.x *= y – multiplication assignment. Умножьте значение y на значение x, сохраните результат в x и возвратите новое значение.Multiply the value of y to the value of x, store the result in x, and return the new value.

x /= y — назначение с делением.x /= y – division assignment. Разделите значение x на значение y, сохраните результат в x и возвратите новое значение.Divide the value of x by the value of y, store the result in x, and return the new value.

x %= y — присваивание остатка.x %= y – remainder assignment. Разделите значение x на значение y, сохраните остаток в x и возвратите новое значение.Divide the value of x by the value of y, store the remainder in x, and return the new value.

x &= y — назначение с операцией И.x &= y – AND assignment. Выполните операцию И для значения y и значения x, сохраните результат в x и возвратите новое значение.AND the value of y with the value of x, store the result in x, and return the new value.

x |= y — назначение с операцией ИЛИ.x |= y – OR assignment. Выполните операцию ИЛИ для значения y и значения x, сохраните результат в x и возвратите новое значение.OR the value of y with the value of x, store the result in x, and return the new value.

x ^= y — назначение с операцией исключающего ИЛИ.x ^= y – XOR assignment. Выполните операцию исключающего ИЛИ для значения y и значения x, сохраните результат в x и возвратите новое значение.XOR the value of y with the value of x, store the result in x, and return the new value.

x <<=  — назначение со сдвигом влево.x <<= y – left-shift assignment. Сдвиньте значение x влево на y позиций, сохраните результат в x и возвратите новое значение.Shift the value of x left by y places, store the result in x, and return the new value.

x >>= y — назначение со сдвигом вправо.x >>= y – right-shift assignment. Сдвиньте значение x вправо на y позиций, сохраните результат в x и возвратите новое значение.Shift the value of x right by y places, store the result in x, and return the new value.

=> — объявление лямбда-выражения.=> – lambda declaration.

См. такжеSee also