Читайте также: |
|
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 primary-expression has the compile-time type dynamic then the operator is dynamically bound (§7.2.2), the post-increment-expression or post-decrement-expression has the compile-time type dynamic and the following rules are applied at run-time using the run-time type of the primary-expression.
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 binding-time error occurs.
Unary operator overload resolution (§7.3.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. In a checked context, if the result of this addition or subtraction is outside the range of the result type and the result type is an integral type or enum type, a System.OverflowException is thrown.
The run-time processing of a postfix increment or decrement operation of the form x++ or x-- consists of the following steps:
· If x is classified as a variable:
o x is evaluated to produce the variable.
o The value of x is saved.
o The selected operator is invoked with the saved value of x as its argument.
o The value returned by the operator is stored in the location given by the evaluation of x.
o The saved value of x becomes the result of the operation.
· If x is classified as a property or indexer access:
o The instance expression (if 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.
o The get accessor of x is invoked and the returned value is saved.
o The selected operator is invoked with the saved value of x as its argument.
o The set accessor of x is invoked with the value returned by the operator as its value argument.
o The saved value of x becomes the result of the operation.
The ++ and -- operators also support prefix notation (§7.7.5). Typically, 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.
Дата добавления: 2015-11-16; просмотров: 80 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Indexer access | | | Object creation expressions |