X hits on this document

1280 views

0 shares

121 / 396

C# LANGUAGE SPECIFICATION

‎7.5

Primary

x.y  f(x)  a[x]  x++  x--  new

typeof  checked  unchecked

‎7.6

Unary

+  -  !  ~  ++x  --x  (T)x

‎7.7

Multiplicative

*  /  %

‎7.7

+  -

‎7.8

Shift

<<  >>

‎7.9

Relational and type testing

<  >  <=  >=  is  as

‎7.9

Equality

==  !=

‎7.10

Logical AND

&

‎7.10

Logical XOR

^

‎7.10

Logical OR

|

‎7.11

Conditional AND

&&

‎7.11

Conditional OR

||

‎7.12

Conditional

?:

‎7.13

Assignment

=  *=  /=  %=  +=  -=  <<=  >>=  &=  ^=  |=

When an operand occurs between two operators with the same precedence, the associativity of the operators controls the order in which the operations are performed:

Except for the assignment operators, all binary operators are left-associative, meaning that operations are performed from left to right. For example, x + y + z is evaluated as (x + y) + z.

The assignment operators and the conditional operator (?:) are right-associative, meaning that operations are performed from right to left. For example, x = y = z is evaluated as x = (y = z).

Precedence and associativity can be controlled using parentheses. For example, x + y * z first multiplies y by z and then adds the result to x, but (x + y) * z first adds x and y and then multiplies the result by z.

All unary and binary operators have predefined implementations that are automatically available in any expression. In addition to the predefined implementations, user-defined implementations can be introduced by including operator declarations in classes and structs (§‎10.9). User-defined operator implementations always take precedence over predefined operator implementations: Only when no applicable user-defined operator implementations exist will the predefined operator implementations be considered, as described in §‎7.2.3 and §‎7.2.4.

+   -   !   ~   ++   --   true   false

Although true and false are not used explicitly in expressions (and therefore are not included in the precedence table in §‎7.2.1), they are considered operators because they are invoked in several expression contexts: boolean expressions (§‎7.16) and expressions involving the conditional (§‎7.12), and conditional logical operators (§‎7.11).