C#中的语句块内的不变性

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

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页