7.5.9 Postfix increment and decrement operators
- post-increment-expression:
- primary-expression ++
- post-decrement-expression:
- primary-expression --
The operand of a postfix 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 postfix 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 (Section 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 operand, and the predefined -- operators return the value produced by subtracting 1 from the operand.
The run-time processing of a postfix increment or decrement operation of the form x++ or x-- consists of the following steps:
- If
xis classified as a variable:xis evaluated to produce the variable.- The value of
xis saved. - The selected operator is invoked with the saved value of
xas its argument. - The value returned by the operator is stored in the location given by the evaluation of
x. - The saved value of
xbecomes the result of the operation.
- If
xis classified as a property or indexer access:- The instance expression (if
xis notstatic) and the argument list (ifxis an indexer access) associated withxare evaluated, and the results are used in the subsequentgetandsetaccessor invocations. - The
getaccessor ofxis invoked and the returned value is saved. - The selected operator is invoked with the saved value of
xas its argument. - The
setaccessor ofxis invoked with the value returned by the operator as itsvalueargument. - The saved value of
xbecomes the result of the operation.
- The instance expression (if
The ++ and -- operators also support prefix notation, as described in Section 7.6.5. 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 or prefix notation. It is not possible to have separate operator implementations for the two notations.