The operand of a prefix increment or decrement operation must be an expression classified as a variable, a property access, or an indexer access. The result of the operation is a value of the same type as the operand.
If the operand of a prefix increment or decrement operation is a property or indexer access, the property or indexer must have both a get
and a set
accessor. If this is not the case, a compile-time error occurs.
Unary operator overload resolution (§7.2.3) is applied to select a specific operator implementation. Predefined ++
and --
operators exist for the following types: sbyte
, byte
, short
, ushort
, int
, uint
, long
, ulong
, char
, float
, double
, decimal
, and any enum type. The predefined ++
operators return the value produced by adding 1 to the argument, and the predefined --
operators return the value produced by subtracting 1 from the argument.
The run-time processing of a prefix increment or decrement operation of the form ++x
or --x
consists of the following steps:
x
is classified as a variable:
x
is evaluated to produce the variable.x
as its argument.x
.x
is classified as a property or indexer access:
x
is not static
) and the argument list (if x
is an indexer access) associated with x
are evaluated, and the results are used in the subsequent get
and set
accessor invocations.get
accessor of x
is invoked.get
accessor as its argument.set
accessor of x
is invoked with the value returned by the operator as its value
argument.The ++
and --
operators also support postfix notation, as described in §7.5.9. The result of x++
or x--
is the value of x
before the operation, whereas the result of ++x
or --x
is the value of x
after the operation. In either case, x
itself has the same value after the operation.
An operator
++
or operator
--
implementation can be invoked using either postfix and prefix notation. It is not possible to have separate operator implementations for the two notations.