ECMA-334 C# Language Specification14.6.5: Prefix increment and decrement operators |
++
unary-expression
--
unary-expression
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 (14.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 prefix increment or decrement operation of the form ++x or --x consists of the following steps:
The ++ and --operators also support postfix notation (14.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 or prefix notation. It is not possible to have separate operator implementations for the two notations.