Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Lebensdauer eines deklarierten Elements ist der Zeitraum, in dem es zur Verwendung verfügbar ist. Variablen sind die einzigen Elemente, die die Lebensdauer aufweisen. Zu diesem Zweck behandelt der Compiler Prozedurparameter und Funktionswerte als Sonderfälle von Variablen. Die Lebensdauer einer Variablen stellt den Zeitraum dar, in dem ein Wert gespeichert werden kann. Sein Wert kann sich während seiner Lebensdauer ändern, aber er behält immer einen Wert.
Verschiedene Lebensdauern
Eine Membervariable (deklariert auf Modulebene, außerhalb einer Prozedur) hat in der Regel dieselbe Lebensdauer wie das Element, in dem es deklariert wird. Eine nicht freigabefähige Variable, die in einer Klasse oder Struktur deklariert ist, ist als separate Kopie für jede Instanz der Klasse oder Struktur vorhanden, in der sie deklariert wird. Jede solche Variable hat dieselbe Lebensdauer wie ihre Instanz. Eine Shared
Variable verfügt jedoch nur über eine einzelne Lebensdauer, die für die gesamte Ausführung der Anwendung dauert.
Eine lokale Variable (innerhalb einer Prozedur deklariert) ist nur vorhanden, während die Prozedur, in der sie deklariert wird, ausgeführt wird. Dies gilt auch für die Parameter dieser Prozedur und für alle Funktionsrückgaben. Wenn diese Prozedur jedoch andere Prozeduren aufruft, behalten die lokalen Variablen ihre Werte bei, während die aufgerufenen Prozeduren ausgeführt werden.
Anfang der Lebensdauer
Die Lebensdauer einer lokalen Variablen beginnt, wenn das Steuerelement die Prozedur eingibt, in der sie deklariert wird. Jede lokale Variable wird auf den Standardwert für den Datentyp initialisiert, sobald die Prozedur ausgeführt wird. Wenn die Prozedur auf eine Dim
Anweisung trifft, die Anfangswerte angibt, legt sie diese Variablen auf diese Werte fest, auch wenn Ihr Code ihnen bereits andere Werte zugewiesen hatte.
Jedes Element einer Strukturvariable wird initialisiert, als wäre es eine separate Variable. Entsprechend wird jedes Element einer Arrayvariable einzeln initialisiert.
Variablen, die innerhalb eines Blocks innerhalb einer Prozedur (z. B. einer For
Schleife) deklariert sind, werden beim Eintrag in die Prozedur initialisiert. Diese Initialisierungen werden wirksam, unabhängig davon, ob der Code den Block jemals ausführt.
Ende der Lebensdauer
Wenn eine Prozedur beendet wird, bleiben die Werte der lokalen Variablen nicht erhalten, und Visual Basic gibt ihren Speicher zurück. Wenn Sie die Prozedur das nächste Mal aufrufen, werden alle lokalen Variablen neu erstellt und erneut initialisiert.
Wenn eine Instanz einer Klasse oder Struktur beendet wird, verlieren die nicht gemeinsamen Variablen ihren Arbeitsspeicher und ihre Werte. Jede neue Instanz der Klasse oder Struktur erstellt und reinitialisiert die nicht freigebenden Variablen.
Shared
-Variablen werden jedoch beibehalten, bis die Anwendung nicht mehr ausgeführt wird.
Verlängerung der Lebensdauer
Wenn Sie eine lokale Variable mit dem Static
Schlüsselwort deklarieren, ist die Lebensdauer länger als die Ausführungszeit der Prozedur. Die folgende Tabelle zeigt, wie die Prozedurdeklaration bestimmt, wie lange eine Static
Variable vorhanden ist.
Speicherort und Freigabe der Prozedur | Die Lebensdauer der statischen Variable beginnt. | Ende der statischen Variablenlebensdauer |
---|---|---|
In einem Modul (standardmäßig freigegeben) | Das erste Mal, wenn die Prozedur aufgerufen wird | Wenn die Anwendung nicht mehr ausgeführt wird |
In einer Klasse Shared (Prozedur ist kein Instanzmember) |
Das erste Mal, wenn die Prozedur entweder für eine bestimmte Instanz oder für den Klassen- oder Strukturnamen selbst aufgerufen wird | Wenn die Anwendung nicht mehr ausgeführt wird |
In einer Instanz einer Klasse, nicht Shared (Prozedur ist ein Instanzmember) |
Das erste Mal, wenn die Prozedur für die bestimmte Instanz aufgerufen wird | Wenn die Instanz für die Garbage Collection (GC, automatische Speicherbereinigung) freigegeben wird |
Statische Variablen mit demselben Namen
Sie können statische Variablen mit demselben Namen in mehreren Prozeduren deklarieren. Wenn Sie dies tun, berücksichtigt der Visual Basic-Compiler jede solche Variable als separates Element. Die Initialisierung einer dieser Variablen wirkt sich nicht auf die Werte der anderen Variablen aus. Dies gilt auch, wenn Sie eine Prozedur mit einer Reihe von Überladungen definieren und eine statische Variable mit demselben Namen in jeder Überladung deklarieren.
Enthaltende Elemente für statische Variablen
Sie können eine statische lokale Variable innerhalb einer Klasse deklarieren, d. h. innerhalb einer Prozedur in dieser Klasse. Sie können jedoch keine statische lokale Variable innerhalb einer Struktur deklarieren, entweder als Strukturelement oder als lokale Variable einer Prozedur innerhalb dieser Struktur.
Beispiel
BESCHREIBUNG
Im folgenden Beispiel wird eine Variable mit dem Schlüsselwort Static deklariert. (Beachten Sie, dass Sie das Dim
-Schlüsselwort nicht benötigen, wenn die Dim-Anweisung einen Modifizierer wie Static
verwendet.)
Programmcode
Function runningTotal(ByVal num As Integer) As Integer
Static applesSold As Integer
applesSold = applesSold + num
Return applesSold
End Function
Kommentare
Im vorherigen Beispiel ist die Variable applesSold
weiterhin vorhanden, nachdem die Prozedur runningTotal
an den aufrufenden Code zurückgegeben wurde. Wenn runningTotal
das nächste Mal aufgerufen wird, behält applesSold
seinen zuvor berechneten Wert bei.
Wenn applesSold
ohne Verwendung Static
deklariert worden wäre, würden die vorherigen angesammelten Werte nicht über Aufrufe runningTotal
hinweg beibehalten werden. Das nächste Mal, wenn runningTotal
aufgerufen wurde, wäre applesSold
neu erstellt und auf 0 initialisiert worden, und runningTotal
hätte einfach denselben Wert zurückgegeben, mit dem es aufgerufen wurde.
Kompilieren des Codes
Sie können den Wert einer statischen lokalen Variablen als Teil der Deklaration initialisieren. Wenn Sie ein Array als array Static
deklarieren, können Sie den Rang (Anzahl der Dimensionen), die Länge jeder Dimension und die Werte der einzelnen Elemente initialisieren.
Sicherheit
Im vorherigen Beispiel können Sie dieselbe Lebensdauer erzeugen, indem Sie auf Modulebene deklarieren applesSold
. Wenn Sie den Bereich einer Variablen auf diese Weise geändert haben, hat die Prozedur jedoch keinen exklusiven Zugriff mehr darauf. Da andere Prozeduren auf applesSold
zugreifen und den Wert ändern können, kann die laufende Summe unzuverlässig sein, und die Verwaltung des Codes gestaltet sich schwieriger.