Шаг 65 - Инструкция Static

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

Static имяПеременной[([индексы])] [As [New] тип] [, имяПеременной[([индексы])] 
[As [New] тип]] . . .

Параметры
имяПеременной
Обязательный. Имя переменной, удовлетворяющее стандартным правилам именования переменных.
индексы
Необязательный. Размерности переменной массива; допускается описание до 60 размерностей. Аргумент индексы использует следующий синтаксис:

[нижний To] верхний [,[нижний To] верхний] . . .
Если нижний индекс не задан явно, нижняя граница массива определяется инструкцией Option Base. Если отсутствует инструкция Option Base, нижняя граница массива равняется нулю.
New
Необязательный. Ключевое слово обеспечивает возможность неявного создания нового экземпляра объекта. При использовании ключевого слова New при описании объектной переменной задается создание нового экземпляра объекта при ссылке на него. Поэтому нет необходимости присваивать ссылку на объект с помощью инструкции Set. Ключевое слово New нельзя использовать для описания переменных любых внутренних типов данных, а также для описания экземпляров зависимых объектов.
тип
Необязательный. Тип данных переменной; поддерживаются типы Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (в настоящее время не поддерживается), Date, String, (для строк переменной длины), String * длина (для строк фиксированной длины), Object, Variant, определяемый пользователем тип или объектный тип. Для каждой описываемой переменной следует использовать отдельное предложение As тип.

Замечания
После запуска программы в модуле переменные, описанные с помощью инструкции Static, сохраняют свои значения до сброса или перезапуска модуля. Инструкция Static применяется в нестатических процедурахs для явного описания переменных, видимых только в этих процедурах, но имеющих время жизни, равное времени жизни модуля, в котором эти процедуры описаны.
Инструкция Static в процедуре предназначена для описания типа данных переменной, которая сохраняет свое значение в промежутках между вызовами процедуры. Например, в следующей инструкции описывается массив целых чисел фиксированного размера:

Static EmployeeNumber(200) As Integer
Ниже приводится описание переменной для нового экземпляра листа электронной таблицы:
Static X As New Worksheet

Если ключевое слово New не используется при описании объектной переменной, то перед использованием объекта необходимо присвоить имеющийся объект с помощью инструкции Set переменной, ссылающейся на этот объект. До присвоения объекта описанная объектная переменная имеет специальное значение Nothing, которое указывает, что переменная не содержит ссылку на какой-либо определенный экземпляр объекта. При включении ключевого слова New в описание новый экземпляр объекта создается при первой ссылке на объект.
Если тип данных или тип объекта не задан, и в модуле отсутствует инструкция DefТип, по умолчанию переменная получает тип Variant.
Инструкция Static и ключевое слово Static похожи, но используются для получения разных результатов. При описании процедуры с ключевым словом Static (например, Static Sub CountSales ()), память для всех локальных переменных процедуры выделяется один раз, и значения этих переменных сохраняются на все время выполнения программы. Для нестатических процедур память для переменных выделяется при каждом вызове процедуры и освобождается при завершении процедуры. Инструкция Static применяется для описания переменных в нестатических процедурах, чтобы сохранить их значения на время выполнения программы.
При инициализации переменных числовая переменная получает значение 0, строка переменной длины получает значение пустой строки (""), а строка фиксированной длины заполняется нулями. Переменные типа Variant получают при инициализации значение Empty. Каждый элемент переменной с типом, определяемым пользователем, при инициализации получает значение, которые он получил бы, если бы являлся одиночной переменной.
При использовании инструкции Static ее обычно помещают в начало процедуры вместе с другими инструкциями описания, такими как Dim.

Пример
В данном примере инструкция Static используется для сохранения значения переменной на все время выполнения модуля.

' Описание функции.
Function KeepTotal(Number)
	' Только переменная Accumulate сохраняет свое значение
	' от вызова к вызову.
	Static Accumulate
	Accumulate = Accumulate + Number
	KeepTotal = Accumulate
End Function

' Описание функции Static.
Static Function MyFunction(Arg1, Arg2, Arg3)
	' Все локальные переменные сохраняют свои значения
	' между вызовами функции.
	Accumulate = Arg1 + Arg2 + Arg3
	Half = Accumulate / 2
	MyFunction = Half
End Function

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 16.02.2002