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

    技术2022-05-11  143

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

     


    最新回复(0)