Referenz - CONSTRUCTOR (Module)
Syntax: [PUBLIC | PRIVATE] SUB name [ALIAS "externerName"] [()] CONSTRUCTOR [priorität] [STATIC]
Typ: Klausel
Kategorie: Programmablauf
Die Klausel CONSTRUCTOR bewirkt, dass eine SUB aufgerufen wird, bevor das Programm gestartet wird. Siehe auch SUB für Details zu Prozeduren.
- 'PRIVATE' und 'PUBLIC' legen fest, ob die SUB PRIVATE oder PUBLIC sein soll; siehe dazu die entsprechenden Einträge der Referenz.
- 'name' ist der Bezeichner der SUB. Er folgt den üblichen Regeln.
- Die 'CONSTRUCTOR'-Klausel markiert die SUB als Konstruktor.
- Ein Konstruktor darf keine Parameterliste besitzen, da kein Weg existiert, beim Programmstart Parameter für die Übergabe festzulegen.
- 'priorität' ist ein INTEGER-Wert zwischen 101 und 65535. Mit diesem Wert kann bei der Existenz mehrerer CONSTRUCTOR-SUBs im selben Modul die Reihenfolge festgelegt werden, in der die Konstruktoren abgearbeitet werden sollen. 101 ist dabei die höchste Priorität; dieser Konstruktor wird zuerst ausgeführt. Die Zahlen an sich haben keine spezielle Bedeutung; lediglich die Verhältnisse zueinander (größer als, kleiner als) wirken sich tatsächlich im Programmverlauf aus. Alle Konstruktor, die ohne eine Priorität festgelegt wurden, werden nach denen ausgeführt, die mit Priorität festgelegt wurden.
Werden in einem Modul mehrere Konstruktoren ohne Priorität verwendet, so werden diese im Code von oben nach unten abgearbeitet.
Ein Konstruktor muss nur dann durch eine DECLARE-Anweisung deklariert werden, wenn sie im Programmverlauf nochmals manuell aufgerufen werden soll. Sie kann dann - wie eine normale Prozedur - im Programm jederzeit aufgerufen werden und folgt den normalen Regeln.
Wird versucht, eine SUB mit der CONSTRUCTOR-Klausel zu belegen, die einen oder mehrere Parameter besitzt, so wird ein Compiler-Fehler erzeugt.
Innerhalb eines Modules können mehrere Konstruktoren verwendet werden. Innerhalb mehrerer Module können ebenfalls zusätzliche Konstruktoren eingefügt werden, unter der Voraussetzung, dass keine zwei PUBLIC-Konstruktoren mit demselben Bezeichner existieren.
Wenn mehrere Module compiliert werden, die Konstruktoren besitzen, kann die Reihenfolge der Ausführung der Konstruktoren nicht garantiert werden, solange keine Priorität angegeben wurde. Darauf muss besonders geachtet werden, wenn die Konstruktoren eines Moduls eine Prozedur eines anderen Moduls aufrufen, das ebenfalls einen Konstruktor besitzt. Es wird empfohlen, einen einzigen Konstruktor zu definieren, der die Prozeduren in den einzelnen Modulen manuell aufruft.
Beispiel:
Dieses Beispielprogramm enthält ein Set aus vier Konstruktoren und Destruktoren. Es wird gezeigt, in welcher Reihenfolge diese abgearbeitet werden.
Sub Constructor1 Constructor 101
Print "Constructor1 aufgerufen - hoechste Prioritaet"
End Sub
Sub Constructor2 Constructor 201
Print "Constructor2 aufgerufen - niedrigere Prioritaet"
End Sub
Sub Constructor3 Constructor
Print "Constructor3 aufgerufen - ohne Prioritaet"
End Sub
Sub Constructor4 Constructor
Print "Constructor4 aufgerufen - ohne Prioritaet"
End Sub
'-------------------------------------------------------
Sub Destructor1 Destructor 101
Print "Destructor1 aufgerufen - niedrigste Prioritaet"
Sleep 'Auf Tastendruck warten
End Sub
Sub Destructor2 Destructor 201
Print "Destructor2 aufgerufen - hoehere Prioritaet"
End Sub
Sub Destructor3 Destructor
Print "Destructor3 aufgerufen - ohne Prioritaet"
End Sub
Sub Destructor4 Destructor
Print "Destructor4 aufgerufen - ohne Prioritaet"
End Sub
'-------------------------------------------------------
Print "Modul-Level Code"
Unterschiede zu QB: neu in FreeBASIC
Unterschiede zu früheren Versionen von FreeBASIC:
- Die Möglichkeit, eine Priorität zuzuweisen, existiert seit FreeBASIC v0.17.
- Konstruktor-SUBs existieren seit FreeBASIC v0.14.
Siehe auch:
DESTRUCTOR (Module), SUB, CONSTRUCTOR (Klassen), Prozeduren
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|