ブロック内で違う意味に書き換えることを禁止している. したがって,次のコードはコンパイル エラーになる.
class Sample {
void foo() {
int x = 1;
if (x > 0) {
double x = 2;
Console.WriteLine(x);
}
}
}
sample.cs) (注:コンパイル エラーになる例)C/C++では このようにブロックを作成して親ブロックの変数を隠してしまってもよいことになっているが, C#では(おそらく不要な混乱を生むという意味で?)避けるべきだという判断になったようだ. う〜む,しかし,わざわざ文法的に規制する必要はあったのかなぁ.