Referenz - DESTRUCTOR (Module)
Syntax:
[Public | Private] Sub name [Alias "externer_name"] [()] Destructor [priorität] [Static]
Typ: Klausel
Kategorie: Programmorganisation
Die DESTRUCTOR-Klausel bewirkt, dass eine SUB aufgerufen wird, bevor das Programm beendet wird. Dies geschieht sowohl dann, wenn eine
END-,
SYSTEM-, oder
STOP-Anweisung aufgerufen, als auch, wenn die letzte Anweisung des Hauptmoduls ausgeführt wird. Wurde per Kommandozeile die Fehlerbehandlung aktiviert, so werden die Destruktoren auch aufgerufen, wenn ein nicht-planmäßiges Programmende auftritt. (Siehe dazu die Kommandozeile.)
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.
- Eine DESTRUCTOR-SUB darf keine Parameterliste besitzen, da kein Weg existiert, festzulegen, welche Parameter übergeben werden.
- Die 'DESTRUCTOR'-Klausel markiert die SUB als Destruktor.
- 'priorität' ist ein INTEGER-Wert zwischen 101 und 65535. Mit diesem Wert kann bei der Existenz mehrerer DESTRUCTOR-SUBs im selben Modul die Reihenfolge festgelegt werden, in der die Destruktoren abgearbeitet werden sollen. 101 ist dabei die niedrigste Priorität; dieser Destruktor wird zuletzt 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 Destruktoren, die ohne eine Priorität festgelegt wurden, werden vor denen ausgeführt, die mit Priorität festgelegt wurden.
Werden in einem Modul mehrere Destruktoren ohne Priorität verwendet, so werden diese im Code von oben nach unten abgearbeitet.
Eine solche SUB muss nur dann durch eine
DECLARE-Anweisung deklariert werden, wenn sie im Programmverlauf nochmals manuell aufgerufen werden soll. Wird sie mit einer normalen DECLARE-Zeile deklariert, so kann sie - wie eine ganz normale SUB - im Programm jederzeit aufgerufen werden und folgt den Regeln einer normalen Prozedur.
Wird versucht, eine SUB mit der DESTRUCTOR-Klausel zu belegen, die einen oder mehrere Parameter besitzt, so wird ein Compiler-Fehler erzeugt. Innerhalb eines Sets von überladenen SUBs (siehe
OVERLOAD) kann nur eine einzige DESTRUCTOR-Sub bestimmt werden, da es nicht möglich ist, mehrere überladene SUBs mit leerer Parameterliste zu erstellen.
Innerhalb eines Modules können mehrere Destruktoren verwendet werden. Innerhalb mehrerer Module können ebenfalls zusätzliche Destruktoren eingefügt werden, unter der Voraussetzung, dass keine zwei PUBLIC-Destruktoren mit demselben Bezeichner existieren.
Wenn mehrere Module kompiliert werden, die Destruktoren besitzen, kann die Reihenfolge der Ausführung dieser nicht garantiert werden, solange keine Priorität angegeben wurde. Darauf muss besonders geachtet werden, wenn die Destruktoren eines Moduls eine Prozedur eines anderen Moduls aufrufen, das ebenfalls einen Destruktor besitzt. Es wird empfohlen, einen einzigen Destruktor zu definieren, der die Prozeduren in den einzelnen Modulen manuell aufruft.
Das Destructor-Schlüsselwort leitet einen eigenen SCOPE-Block ein. Siehe dazu auch
SCOPE.
Beispiel:
Dieses Beispielprogramm enthält ein Set aus vier Constructoren 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 - niedrigeste 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 FreeBASIC-Versionen:
- Die Möglichkeit, eine Priorität zuzuweisen, existiert erst seit FreeBASIC v0.17.
- existiert seit FreeBASIC v0.14
Siehe auch:
CONSTRUCTOR (Module),
SUB,
DESTRUCTOR (Klassen)
| Zusätzliche Informationen und Funktionen | ||||
|---|---|---|---|---|
|
||||




FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!
Versionen