Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Русский_Проект: Изучение Visual Basic C#. Учебный курс


C#. Учебный курс

Здравствуйте, программисты! Надеюсь, все хорошо отметили новогодние праздники. Пора двигаться дальше. Сегодня у нас десятое занятие, на котором мы еще раз поговорим о переменных.

Область видимости и время жизни переменных

Итак, блок кода окружается фигурными скобками. Но он также определяет область видимости, которая задает время жизни объявляемых переменных. Объявленная внутри области видимости переменная является недоступной для кода, который расположен за этой областью. Следовательно, при объявлении переменной в пределах ее области видимости, вы локализуете эту переменную и защищаете ее от неразрешенного доступа и модификации. Область видимости может быть вложенной. Каждый раз, создавая новый блок кода, вы создаете новую вложенную область видимости и при этом внешняя область становится видимой для вложенной области. Но при этом объекты, объявленные во внутренней области видимости будут невидимы для кода во внешней области. Рассмотрим пример:

// Пример использования вложенных областей
using System;

class ScopeDemo
{
    public static void Main()
    {
        int x; // это переменная видна всему коду в пределах метода Main
        x = 10;

        if(x == 10)
        { // создается новая область видимости
            int y = 20; // эта переменная будет видна только в этом блоке

            // Так как видны обе переменные, мы можем их использовать
            Console.WriteLine("Сумма переменных x и y равна: " + (x + y));
        } // блок кода закончился

        // y = 100;  // если уберете знаки комментария, то получите ошибку!

        Console.WriteLine("Значение x равно: " + x);
    }
}

Запустите программу. Все будет работать. Теперь попробуйте убрать комментарии у строчки y = 100; и вы получите сообщение об ошибке, так как переменная y была объявлена во внутреннем блоке if и видима только там. Попытка присвоить этой переменной другое значение за пределами этого блока и приводит к ошибке. Тогда как переменная x видна в обоих блоках кода и доступна для использования.

Еще один важный момент связан с временем жизни переменной. Переменные создаются при их объявлении в какой-либо области видимости (при входе в данную область и уничтожаются при выходе из этой области. Это означает, что переменная не будет сохранять свое значение при выходе из своей области видимости, то есть переменная, объявленная в пределах метода, не будет хранить свои значения между вызовами этого метода. Также, переменная, объявленная в рамказ блока, будет терять свое значение при выходе из блока. Следовательно, время жизни перменной ограничено ее областью видимости.

Если при объявлении переменной одновременно происходит ее инициализация, то переменная будет повтороно инициализироваться каждый раз при входе в блок, в котором она объявлена. Рассмотрим следующую программу:

// Пример о времени жизни переменной

using System;

class VarLife
{
    public static void Main()
    {
        int x;

        for(x = 0; x < 3; x++)
        {
            int y = -2;  // переменная инициализируется каждый раз при входе в блок
            Console.WriteLine("Значение y равно: " + y);

            y = 25;
            Console.WriteLine("Значение y равно: " + y);
        }
    }
}

Запустив программу, вы увидите следующее:

Значение y равно: -2
Значение y равно: 25
Значение y равно: -2
Значение y равно: 25
Значение y равно: -2
Значение y равно: 25

Как видите, каждый раз при входе в цикл for переменная y принимает значение -2, затем ее присваивается значение 25, которое утрачивается при завершении цикла.

Перед этим мы рассматривали пример с вложенными блоками. Казалось бы, если переменная во внутренней области не видима для кода во внешней области, то можно использовать переменные с одинаковыми именами. Но на самом деле этого делать нельзя (в отличии от C++). Давайте все-таки проверим на собственном опыте:

// Второй пример использования вложенных областей
using System;

class ScopeDemo2
{
    public static void Main()
    {
        int x; // это переменная видна всему коду в пределах метода Main
        x = 10;
        int y = 8; // она тоже видна

        if(x == 10)
        { // создается новая область видимости
            int y = 20; // эта переменная будет видна только в этом блоке

            // Так как видны обе переменные, мы можем их использовать
            Console.WriteLine("Сумма переменных x и y равна: " + (x + y));
        } // блок кода закончился

        
        Console.WriteLine("Значение x равно: " + x);
    }
}

Вы не сможете запустить программу, так как используются две переменные с одинаковыми именами. Проявите фантазию и придумайте одной из переменной другое имя. Неужели вам не хватает других букв?

Visual Basic 6.0

Добавил несколько примеров для Visual Basic 6.0:
curve_butterfly.zip - рисуем кривую Бабочка
mouse_reverse.zip - Шутка. Меняем направление мыши на обратное

Эти примеры можно скачать с этой страницы в течении недели.

Удачного вам программирования!


©2007 А.Климов
Русский_Проект

В избранное