Constructor (Module)
 
Задает выполнение процедуры перед кодом уровня модуля

Синтаксис

[Public | Private] Sub procedure_name [Alias "external_identifier"] [()] Constructor [priority] [Static]
{ тело процедуры }
End Sub

Описание

Ключевое слово Constructor , используемое в объявлении Sub заставляет процедуру выполняться до кода модуля уровня. Процедуры, определенные как конструкторы, можно использовать так же, как обычные процедуры, то есть, они могут быть вызваны из кода уровня модуля, а также из других процедур.

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

В одном модуле, конструкторы обычно выполняются в обратном порядке, а не в том, в котором они определены.

Атрибут priority представляет собой целое число от 101 до 65535, которое может использоваться, чтобы заставить конструкторы выполняться в определенном порядке. Значение priority не имеет конкретного смысла, только отношение числа с другими приоритетами конструктора. 101 имеет самый высокий приоритет и выполняются в первую очередь. Все конструкторы, имеющие атрибут priority выполняются до конструкторов, не имеющих атрибута. Значение приоритета 65535 такое же, как если бы мы не присваивали значения приоритета.

Модуль может определить несколько процедур конструктора, и несколько модулей могут определить дополнительные конструкторы , если никакие два Public конструктора на разделяют такое же procedure_name.

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

Пример

'' ConDesExample.bas : Пример программы, которая определяет два набора
'' конструкторов и деструкторов. Демонстрирует, когда и в каком порядке
'' они вызываются при компоновке в одном модуле.

Sub Constructor1() Constructor
    Print "Constructor1() called"
End Sub

Sub Destructor1() Destructor
    Print "Destructor1() called"
End Sub

Sub Constructor2() Constructor
    Print "Constructor2() called"
End Sub

Sub Destructor2() Destructor
    Print "Destructor2() called"
End Sub

    '' ----------------------
    Print "module-level code"

    End 0
    '' ----------------------

Вывод:
Constructor2() called
Constructor1() called
module-level code
Destructor1() called
Destructor2() called

Отличия от QB

  • Новое в FreeBASIC

См. также