C#语言规范规定,对于表达式中一个简单命名的标识符,在同一个即刻闭合控制块内或者switch块内(the immediately enclosing block or switch-block)的语义是恒定不变的。这条规则确保了在一个表达式的上下文的环境中,同一个名字在一个控制块内拥有相同的含义。否则会引发编译错误,如下:
class Test{double x;
void F(bool b) { x = 1.0; //外围控制块 if (b) { int x; //嵌套控制块是属于外围控制块, 同一个即刻闭合控制块 x = 1; } } }
但是下面的就不会引发编译错误:
class Test{double x;
void F(bool b) { if (b) { x = 1.0;//指向Test.x, } else { int x;//覆盖了Test.x, x = 1; }}}
这些编译错误在C++是不会发生的。