C#: выражения (Expressions) и операторы (Operators)

Выражение по сути является значением (выражает значение). Самый простой пример выражения — константа (например, 123) или переменная (например, x).Выражения можно объединять и изменять с помощью операторов. Операторы принимают один или более входящих операндов и возвращают новое выражение.

Операнды в свою очередь также могут быть выражениями (с оператором), таким образом можно создавать сложные составные (комплексные) выражения:

Операторы можно разделить на унарные, бинарные и тернарными в зависимости от количества операндов, которые принимает оператор (один, два или три). Бинарный оператор всегда располагается между двумя операндами (инфиксная запись).

Операторы встроенные в базовую часть языка называются основными (primary), например оператор вызова метода — ().

Выражения, которые не возвращают никакого значения, называются пустыми выражениями (void expression), например, Console.WriteLine (1). Пустые выражения не могут быть использованы в качестве операнда в других (комплексных) выражениях.

Выражения присваивания (Assignment Expressions)

В выражениях присваивания используется оператор = позволяющий присвоить переменной значение другого выражения.

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

Эта особенность может быть использована для инициализации нескольких переменных сразу:

Составные операторы присваивания (compound assignment operators) — сокращение, объединяющее присваивание с каким-либо другим оператором:

Приоритет и ассоциативность операторов

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

Бинарные операторы (за исключением оператора присваивания =, лямбды => и оператора объединения со значением  Null ??) — лево-ассоциативные, т.е. выполняются слева направо (например, 8/4/2 выполняется как (8/4)/2). Порядок исполнения можно изменить с помощью скобок.

Оператор присваивания, лямбда, оператор объединения со значение Null и тернарный условный оператор — право-ассоциативные, т.е. исполняются справа налево.

Сводная таблица операторов C#

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

ОператорНазваниепримерперегружаемость 
Основные (Primary)    
.Доступ к членамx.yнет
-> Указатель на структуруx->yнет 
() Вызов функцииx()нет 
[] Массив/индексa[x]через индексатор
++ Пост-инкрементx++да
— Пост-декрементx— да 
new Новый экземплярnew Foo()нет
stackallocНебезопасное выделение стекаstackalloc(10) нет
typeofПолучить тип из идентификатораtypeof(int)нет
checkedВключить проверку переполнения целочисленных типовchecked(x)нет
unchecked Выключить проверку переполнения целочисленных типов unchecked(x)нет
defaultЗначение по умолчаниюdefault(char)нет 
awaitОжиданиеawait mytaskнет 
Унарные (Unary)    
sizeofПолучить размер структуры (struct)sizeof(int) нет
+Положительное значение+x да 
— Отрицательное значение-x да 
Отрицание (не)!xда 
~Поразрядное дополнение~xда
++ Пре-инкремент++xда 
— Пре-декремент —x да 
() Приведение к типу(int)xнет 
Значение по адресу*xнет 
Адрес значения &x нет 
Мультипликативные (Multiplicative)    
*Умножениеx * yда
Делениеx / y да 
Остаток от деления x % y да 
Аддитивные (Additive)    
Сложениеx + yда
— Вычитание x — y да 
Операторы сдвига (Shift)
<<Сдвиг влевоx << 1да
>>Сдвиг вправо x >> 1да 
ОПЕРАТОРЫ ОТНОШЕНИЙ (Relational)
Меньше чемx < yда
Больше чем x > y да 
<= Меньше или равноx <= yда 
>= Больше или равно x >= yда 
is Принадлежность экземпляра к типу x is yнет 
as Преобразование типаx as yнет 
Операторы равенства (Equality)
==Равноx == yда
!=Не равно x != yда 
Логическое И (Logical And)
Иx & yда
Логическое исключающее ИЛИ (Logical Xor)
^Исключающее ИЛИ x ^ yда 
Логическое ИЛИ (Logical Or)
|ИЛИ x | y да
Условное И (Conditional And)   
&&Условное И x && yчерез &
Условное ИЛИ (Conditional Or)    
||Условное ИЛИ x || y через | 
Тернарный Условный оператор (Conditional (Ternary))    
? :Условие isTrue ? then
This : elseThis
нет
Присваивание и лямбда (Assignment and lambda)    
=Присвоитьx = yнет
*= Умножить себя наx *= 2 через * 
/= Разделить себя наx /= 2 через / 
+= Прибавить к себеx += 2 через + 
-= Вычесть из себяx -= 2 через — 
<<= Сдвинуть себя влево на x <<= 2 через << 
>>= Сдвинуть себя вправо на x >>= 2 через >> 
&=Назначение Иx &= 2 через &
^=Назначение исключающего ИЛИx ^= 2через ^
|=Назначение ИЛИx |= 2через |
=>Лямбдаx => x + 1нет

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *