Jon Jagger
jon@jaggersoft.com
Table of Contents 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Notes DownloadECMA-334 C# Language Specificationpreviousnextprevious at this levelnext at this level 14 Expressionsprevious at this levelnext at this level 14.13 Assignment operatorsprevious at this levelnext at this level 14.13.2 Compound assignment Paragraph 11 An operation of the form x op= y is processed by applying binary operator overload resolution (§14.2.4) as if the operation was written x op y. 2 Then, Paragraph 21 The term "evaluated only once" means that in the evaluation of x op y, the results of any constituent expressions of x are temporarily saved and then reused when performing the assignment to x. [Example: For example, in the assignment A()[B()] += C(), where A is a method returning int[], and B and C are methods returning int, the methods are invoked only once, in the order A, B, C. end example] Paragraph 31 When the left operand of a compound assignment is a property access or indexer access, the property or indexer must have both a get accessor and a set accessor. 2 If this is not the case, a compile-time error occurs. Paragraph 41 The second rule above permits x op= y to be evaluated as x = (T)(x op y) in certain contexts. 2 The rule exists such that the predefined operators can be used as compound operators when the left operand is of type sbyte, byte, short, ushort, or char. 3 Even when both arguments are of one of those types, the predefined operators produce a result of type int, as described in §14.2.6.2. 4 Thus, without a cast it would not be possible to assign the result to the left operand. Paragraph 51 The intuitive effect of the rule for predefined operators is simply that x op= y is permitted if both of x op y and x = y are permitted. [Example: In the example
byte b = 0;  
char ch = '\0';  
int i = 0;  
b += 1;        // Ok  
b += 1000;      // Error, b = 1000 not permitted  
b += i;        // Error, b = i not permitted  
b += (byte)i;    // Ok  
ch += 1;       // Error, ch = 1 not permitted  
ch += (char)1;   // Ok  
the intuitive reason for each error is that a corresponding simple assignment would also have been an error. end example]
{ JSL }
Jagger Software Ltd
Company # 4070126
VAT # 762 5213 42
Valid HTML 4.01Valid CSS