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++是不会发生的。