class Test { double x; void F(bool b) { x = 1.0; if (b) { int x = 1; } } }results in a compile-time error because x refers to different entities within the outer block (the extent of which includes the nested block in the if statement). 2 In contrast, the example
class Test { double x; void F(bool b) { if (b) { x = 1.0; } else { int x = 1; } } }is permitted because the name x is never used in the outer block. Paragraph 31 Note that the rule of invariant meaning applies only to simple names. 2 It is perfectly valid for the same identifier to have one meaning as a simple name and another meaning as right operand of a member access (§14.5.4). [Example: For example:
struct Point { int x, y; public Point(int x, int y) { this.x = x; this.y = y; } }The example above illustrates a common pattern of using the names of fields as parameter names in an instance constructor. In the example, the simple names x and y refer to the parameters, but that does not prevent the member access expressions this.x and this.y from accessing the fields. end example]
| |
Jagger Software Ltd | |
Company # 4070126 | |
VAT # 762 5213 42 |