変数をブロック内で違う意味に書き換えることはできない

ブロック内で違う意味に書き換えることを禁止している. したがって,次のコードはコンパイル エラーになる.

class Sample {
    void foo() {
        int x = 1;
        if (x > 0) {
            double x = 2;
            Console.WriteLine(x);
        }
    }
}

C/C++ではOKなんだけど…

C/C++では このようにブロックを作成して親ブロックの変数を隠してしまってもよいことになっているが, C#では(おそらく不要な混乱を生むという意味で?)避けるべきだという判断になったようだ. う〜む,しかし,わざわざ文法的に規制する必要はあったのかなぁ.


はたいたかし
http://exlight.net/
2006-08-31
Home > 開発 > C#/.NET