Время существования в Visual Basic
Обновлен: Ноябрь 2007
Время существования объявленного элемента — это период времени, в течение которого он может быть использован. Переменные — это единственные элементы, имеющие время существования. Для этой цели компилятор обрабатывает параметры процедуры и возвращаемые функцией значения в качестве особых видов переменных. Время существования переменной представляет собой период, в течение которого она может иметь значение. В течение времени существования значение переменной может меняться, но переменная всегда имеет какое-то значение.
Различные сроки существования
Переменная-член (объявленная на уровне модуля вне какой-либо процедуры) обычно имеет то же время существования, что и элемент, в котором она была объявлена. Не являющиеся общими переменные, объявленные в классе или структуре, существуют как отдельные копии для каждого экземпляра класса или структуры, в которых они были объявлены. Каждая такая переменная имеет то же время существования, что и экземпляр класса. Однако переменная, объявленная как Shared, обладает сроком существования, который длится в течение работы приложения.
Локальная переменная (объявленная внутри процедуры) существует только во время работы процедуры, в которой она объявлена. Это также относится к аргументам этой процедуры и значениям, возвращаемым функциями. Однако если эта процедура вызывает другие процедуры, значения ее локальных переменных сохраняются во время работы вызываемых процедур.
Начало времени существования
Время существования локальной переменной начинается при передаче управления в процедуру, в которой переменная объявлена. Каждой локальной переменной в начале выполнения процедуры присваивается значение по умолчанию, предусмотренное для ее типа. Когда в процедуре встречается инструкция Dim, определяющая исходные значения, для переменных устанавливаются указанные значения, вне зависимости от того, какие значения эти переменные имели ранее.
Каждый член структурной переменной инициализируется так, как если бы это была отдельная переменная. Подобным образом, каждый элемент массива инициализируется отдельно.
Переменные, объявленные в блоке и находящегося внутри процедуры (например в цикле For), инициализируются при входе в процедуру. Это происходит вне зависимости от того, выполняется этот блок в конечном итоге или нет.
Окончание времени существования
Когда процедура завершается, значения ее локальных переменных не сохраняются, и проект Visual Basic освобождает память, выделенную под переменные. При следующем вызове процедуры все ее локальные переменные создаются заново и повторно инициализируются.
При уничтожении экземпляра класса или структуры его переменные, не являющиеся общими, теряют свои значения и расположение в памяти. Каждый новый экземпляр класса или структуры создает и инициализирует все свои элементы, если они не общие. Однако переменные Shared сохраняются до тех пор, пока приложение не завершится.
Продление срока существования
Если объявить локальную переменную с ключевым словом Static, ее время существования будет дольше времени выполнения процедуры. В следующей таблице показано, каким образом объявление процедуры определяет, как долго переменная Static будет существовать.
Расположение процедуры и совместное использование |
Начинается время существования статической переменной |
Заканчивается время существования статической переменной |
---|---|---|
В модуле (общем по умолчанию) |
При первом вызове процедуры |
При остановке выполнения приложения |
В классе или структуре Shared (процедура не является членом экземпляра) |
Первый раз процедура вызывается определенным экземпляром или именем самого класса или структуры |
При остановке выполнения приложения |
В экземпляре класса или структуры, который не является общим Shared (процедура является членом экземпляра) |
При первом вызове процедуры для определенного экземпляра |
Когда экземпляр освобождается для сборки мусора |
См. также
Задачи
Практическое руководство. Увеличение времени жизни переменной
Устранение неполадок, связанных с типами данных
Основные понятия
Область видимости в Visual Basic
Объявление переменной в Visual Basic