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++是不會發生的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章