C# 4.0: полное руководство | страница 53
Для того чтобы стала более понятной сущность вложенных областей действия, рассмотрим следующий пример программы.
>// Продемонстрировать область действия кодового блока,
>using System;
>class ScopeDemo {
> static void Main() {
> int x; // Эта переменная доступна для всего кода внутри метода Main().
> x = 10;
> if (x == 10) { // начать новую область действия
> int у = 20; // Эта переменная доступна только в данном кодовом блоке.
> // Здесь доступны обе переменные, х и у.
> Console.WriteLine("х и у: " + x + " " + у);
> x = у * 2;
> }
> // у = 100; // Ошибка! Переменна у здесь недоступна.
> //А переменная х здесь по-прежнему доступна.
> Console.WriteLine("х равно " + x) ;
> }
>}
Как поясняется в комментариях к приведенной выше программе, переменная х объявляется в начале области действия метода Main(), и поэтому она доступна для всего последующего кода в пределах этого метода. В блоке условного оператора if объявляется переменная у. А поскольку этот кодовый блок определяет свою собственную область действия, то переменная у видима только для кода в пределах данного блока. Именно поэтому строка line у = 100 ;, находящаяся за пределами этого блока, закомментирована. Если удалить находящиеся перед ней символы комментария (//), то во время компиляции программы произойдет ошибка, поскольку переменная у невидима за пределами своего кодового блока. В то же время переменная х может использоваться в блоке условного оператора i f, поскольку коду из этого блока, находящемуся во вложенной области действия, доступны переменные, объявленные в охватывающей его внешней области действия.
Переменные могут быть объявлены в любом месте кодового блока, но они становятся действительными только после своего объявления. Так, если объявить переменную в начале метода, то она будет доступна для всего остального кода в пределах этого метода. А если объявить переменную в конце блока, то она окажется, по существу, бесполезной, поскольку не будет доступной ни одному коду.
Если в объявление переменной включается инициализатор, то такая переменная инициализируется повторно при каждом входе в тот блок, в котором она объявлена. Рассмотрим следующий пример программы.
>// Продемонстрировать время существования переменной.
>using System;
>class VarlnitDemo {
> static void Main() {
> int x;
> for(x = 0; x < 3; x++) {
> int у = -1; // Переменная у инициализируется при каждом входе в блок.