
14 Expressions
14.13 Assignment operators
14.13.1 Simple assignment
Paragraph 11 The = operator is called the simple assignment operator. 2 In a simple assignment, the right operand must be an expression of a type that is implicitly convertible to the type of the left operand. 3 The operation assigns the value of the right operand to the variable, property, or indexer element given by the left operand.
Paragraph 21 The result of a simple assignment expression is the value assigned to the left operand. 2 The result has the same type as the left operand and is always classified as a value.
Paragraph 31 If the left operand is a property or indexer access, the property or indexer must have a set accessor. 2 If this is not the case, a compile-time error occurs.
Paragraph 41 The run-time processing of a simple assignment of the form x = y consists of the following steps: string[] sa = new string[10]; object[] oa = sa; oa[0] = null; // Ok oa[1] = "Hello"; // Ok oa[2] = new ArrayList(); // ArrayTypeMismatchExceptionthe last assignment causes a System.ArrayTypeMismatchException to be thrown because an instance of ArrayList cannot be stored in an element of a string[]. end note] Paragraph 51 When a property or indexer declared in a struct-type is the target of an assignment, the instance expression associated with the property or indexer access must be classified as a variable. 2 If the instance expression is classified as a value, a compile-time error occurs. [Note: Because of §14.5.4, the same rule also applies to fields. end note] [Example: Given the declarations:
struct Point
{
int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int X {
get { return x; }
set { x = value; }
}
public int Y {
get { return y; }
set { y = value; }
}
}
struct Rectangle
{
Point a, b;
public Rectangle(Point a, Point b) {
this.a = a;
this.b = b;
}
public Point A {
get { return a; }
set { a = value; }
}
public Point B {
get { return b; }
set { b = value; }
}
}
in the example Point p = new Point(); p.X = 100; p.Y = 100; Rectangle r = new Rectangle(); r.A = new Point(10, 10); r.B = p;the assignments to p.X, p.Y, r.A, and r.B are permitted because p and r are variables. However, in the example
Rectangle r = new Rectangle(); r.A.X = 10; r.A.Y = 10; r.B.X = 100; r.B.Y = 100;the assignments are all invalid, since r.A and r.B are not variables. end example]
| |
| Jagger Software Ltd | |
| Company # 4070126 | |
| VAT # 762 5213 42 |