Поделиться через


Практическое руководство. Увеличение времени жизни переменной

Обновлен: Ноябрь 2007

Как правило, переменная прекращает свое существование, когда прекращает свое существование элемент программирования, в котором она объявлена. Однако можно сделать срок существования переменной больше срока существования содержащего ее элемента, объявив ее с помощью ключевого слова Static (Visual Basic).

Дополнительные сведения см. в разделе Время существования в Visual Basic.

Продление срока существования переменной дольше срока существования содержащего ее элемента

  • Если переменная является локальной переменной (т.е. объявлена внутри процедуры), добавьте ключевое слово Static в оператор Оператор Dim (Visual Basic), с помощью которого она объявлена. Статическая переменная существует столько же времени, сколько класс или модуль, содержащий процедуру, в которой она объявлена.

    Если локальная переменная находится внутри процедуры Shared (Visual Basic), то процедура и ее переменные существуют на протяжении всего времени выполнения приложения. В этом случае не используйте ключевое слово Static.

  • Если переменная является переменной-членом (т.е. объявлена в классе или структуре вне какой-либо процедуры), добавьте ключевое слово Shared в оператор Dim, в котором объявлена эта переменная. Общие переменные не связаны ни с каким экземпляром класса или структуры и существуют на протяжении всего времени выполнения приложения. Нельзя использовать ключевое слово Static в переменной-члене.

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

Пример

В приведенном ниже примере объявляется переменная с использованием ключевого слова Static (Visual Basic). (Обратите внимание, что ключевое слово Dim не требуется, если в Оператор Dim (Visual Basic) используется модификатор, например Static.)

Function runningTotal(ByVal num As Integer) As Integer
    Static applesSold As Integer
    applesSold = applesSold + num
    Return applesSold
End Function

В предыдущем примере переменная applesSold продолжает существовать после того, как процедура runningTotal осуществляет возврат в вызывающий код. При следующем вызове runningTotal переменная applesSold сохраняет ранее вычисленное значение.

Если applesSold была объявлена без использования ключевого слова Static, то ранее накопленные значения не сохранятся при последующих вызовах runningTotal. При последующих вызовах runningTotal переменная applesSold создавалась бы заново, принимая значение 0, и runningTotal просто возвращала бы то же значение, с которым была вызвана.

Компиляция кода

Значение статической локальной переменной можно инициализировать при ее объявлении. Если массив объявляется как Static, можно инициализировать его размерность (число измерений), длину по каждому из измерений и значения отдельных элементов.

Статические переменные с одинаковыми именами

Статические переменные с одним и тем же именем можно объявлять в нескольких процедурах. В этом случае компилятор Visual Basic воспринимает каждую из таких переменных как отдельный элемент. Инициализация одной из этих переменных не влияет на значения остальных. То же справедливо и при определении процедуры с набором перегрузок и объявлении статической переменной с тем же именем в каждой перегрузке.

Содержание элементов для статических переменных

Статическую локальную переменную можно объявить в рамках класса, то есть внутри процедуры в этом классе. Однако нельзя объявить статическую локальную переменную в структуре как член структуры или как локальную переменную процедуры в этой структуре.

Безопасность

В предыдущем примере можно создать тот же срок существования путем объявления applesSold на уровне модуля. Однако, если таким образом изменить область действия переменной, процедура уже не будет иметь к ней исключительный доступ. Поскольку другие процедуры смогут получить доступ к переменной applesSold и изменить ее значение, значения с накоплением окажутся ненадежными, а код более сложным в обслуживании.

См. также

Основные понятия

Время существования в Visual Basic

Характеристики объявленных элементов

Область видимости в Visual Basic

Уровни доступа в Visual Basic

Переменные в Visual Basic

Объявление переменной в Visual Basic

Перегрузка процедур