Читаем Интернет-журнал "Домашняя лаборатория", 2007 №9 полностью

На самом деле, ситуация с процедурным блоком в C# не так проста. Процедурный блок имеет сложную структуру; в него могут быть вложены другие блоки, связанные с операторами выбора, цикла и так далее. В каждом таком блоке, в свою очередь, допустимы вложения блоков. В каждом внутреннем блоке допустимы объявления переменных. Переменные, объявленные во внутренних блоках, локализованы именно в этих блоках, их область видимости и время жизни определяются этими блоками. Локальные переменные начинают существовать при достижении вычислений в блоке точки объявления и перестают существовать, когда процесс вычисления завершает выполнение операторов блока. Можно полагать, что для каждого такого блока выполняется так называемый пролог и эпилог. В прологе локальным переменным отводится память, в эпилоге память освобождается. Фактически ситуация сложнее, поскольку выделение памяти, а следовательно, и начало жизни переменной, объявленной в блоке, происходит не в момент входа в блок, а лишь тогда, когда достигается точка объявления локальной переменной.

Давайте обратимся к примеру. В класс Testing добавлен метод с именем Scopevar, вызываемый в процедуре Main. Вот код этого метода:

///

/// Анализ области видимости переменных ///

/// 

public void ScopeVar(int x)

{

      //int x=0;

      int у =77; string s = name;

      if (s=="Точка1")

      {

            int u = 5; int v = u+y; x +=1;

            Console.WriteLine("y= {0}; u={1};

               v={2}; x={3 } ", у, u,v,x);

       }

       else

       {

             int u= 7; int v= u+y;

             Console.WriteLine("y= {0}; u={1}; v={2}", y,u,v);

       }

       // Console.WriteLine("y= {0}; u={1}; v={2}",y,u,v);

       // Локальные переменные не могут быть статическими.

       // static int Count = 1;

       // Ошибка: использование sum до объявления

       // Console.WriteLine("х= {0}; sum ={1}", x,sum);

       int i;long sum =0;

Перейти на страницу:

Похожие книги