Lebensdauer in Visual Basic
Aktualisiert: November 2007
Die Lebensdauer eines deklarierten Elements ist der Zeitraum, während dessen das Element verfügbar ist. Variablen sind die einzigen Elemente, die eine Lebensdauer haben. Aus diesem Grund behandelt der Compiler Prozedurparameter und Funktionsrückgaben als spezielle Variablenarten. Die Lebensdauer einer Variablen ist der Zeitraum, während dessen sie einen Wert enthalten kann. Der Wert kann sich innerhalb der Lebensdauer ändern, aber ein Wert ist immer vorhanden.
Unterschiedliche Lebensdauer
Eine Membervariable (eine auf Modulebene außerhalb der Prozeduren deklarierte Variable) hat in der Regel die gleiche Lebensdauer wie das Element, in dem sie deklariert ist. Eine nicht freigegebene Variable, die in einer Klasse oder einer Struktur deklariert ist, besteht als separate Kopie für jede Instanz der Klasse bzw. Struktur, in der sie deklariert ist. Jede dieser Variablen hat die gleiche Lebensdauer wie ihre Instanz. Eine Shared-Variable hat jedoch nur eine Lebensdauer, die über die gesamte Zeit reicht, in der die Anwendung ausgeführt wird.
Eine lokale Variable (eine innerhalb einer Prozedur deklarierte Variable) besteht nur so lange, wie die Prozedur, in der sie deklariert ist, ausgeführt wird. Dies gilt auch für die Parameter der Prozedur sowie alle Funktionsrückgaben. Wenn diese Prozedur jedoch andere Prozeduren aufruft, behalten die lokalen Variablen ihre Werte, solange die aufgerufenen Prozeduren ausgeführt werden.
Anfang der Lebensdauer
Die Lebensdauer einer lokalen Variable beginnt, wenn die Prozedur, in der sie deklariert ist, die Steuerung erhält. Jede lokale Variable wird mit dem Standardwert für ihren Datentyp initialisiert, sobald die Ausführung der Prozedur beginnt. Wenn die Prozedur auf eine Dim-Anweisung trifft, die Anfangswerte angibt, setzt sie diese Variablen auf diese Werte, auch wenn der Code bereits andere Werte dafür zugewiesen hat.
Jeder Member einer Strukturvariablen wird wie eine separate Variable initialisiert. Auf ähnliche Weise wird jedes Element einer Arrayvariablen einzeln initialisiert.
Variablen, die in einem Block innerhalb einer Prozedur deklariert sind (z. B. in einer For-Schleife), werden beim Eintritt in die Prozedur initialisiert. Diese Initialisierungen finden unabhängig davon statt, ob der Code den Block jemals ausführt.
Ende der Lebensdauer
Wenn eine Prozedur endet, bleiben die Werte ihrer lokalen Variablen nicht erhalten und Visual Basic fordert ihren Arbeitsspeicher an. Beim nächsten Aufruf der Prozedur werden alle ihre lokalen Variablen von neuem erstellt und initialisiert.
Wenn eine Instanz einer Klasse oder Struktur beendet wird, verlieren die nicht freigegebenen Variablen ihren Arbeitsspeicher und ihre Werte. Jede neue Instanz der Klasse oder Struktur erstellt und initialisiert ihre nicht freigegebenen Variablen erneut. Shared-Variablen bleiben jedoch erhalten, bis die Anwendung nicht mehr ausgeführt wird.
Erweiterung der Lebensdauer
Wenn Sie eine lokale Variable mit dem Static-Schlüsselwort deklarieren, geht ihre Lebensdauer über die Ausführungsdauer ihrer Prozedur hinaus. Aus der folgenden Tabelle geht hervor, wie die Prozedurdeklaration die Lebensdauer einer Static-Variablen bestimmt.
Prozedurspeicherort und -freigabe |
Lebensdauer der statischen Variablen beginnt |
Lebensdauer der statischen Variablen endet |
---|---|---|
In einem Modul (standardmäßig freigegeben) |
Wenn die Prozedur das erste Mal aufgerufen wird |
Wenn die Ausführung der Anwendung beendet wird |
Shared In einer Klasse oder einer Struktur (Prozedur ist kein Instanzmember) |
Wenn die Prozedur zum ersten Mal entweder an einer bestimmten Instanz oder am Klassen- oder Strukturnamen selbst aufgerufen wird |
Wenn die Ausführung der Anwendung beendet wird |
Nicht Shared in einer Instanz einer Klasse oder Struktur (Prozedur ist ein Instanzmember) |
Wenn die Prozedur zum ersten Mal an der spezifischen Instanz aufgerufen wird |
Wenn die Instanz für Garbage Collection (GC) freigegeben wird |
Siehe auch
Aufgaben
Gewusst wie: Erhöhen der Lebensdauer einer Variablen
Problembehandlung bei Datentypen
Konzepte
Gültigkeitsbereich in Visual Basic
Zugriffsebenen in Visual Basic
Variablendeklaration in Visual Basic