Gewusst wie: Erhöhen der Lebensdauer einer Variablen
Aktualisiert: November 2007
Eine Variable verschwindet normalerweise, wenn das Programmierelement, in dem sie deklariert ist, nicht mehr existiert. Sie können jedoch festlegen, dass die Variable eine höhere Lebensdauer hat als das enthaltende Element. Deklarieren Sie die Variable dazu mit dem Schlüsselwort Static (Visual Basic).
Weitere Informationen finden Sie unter Lebensdauer in Visual Basic.
So legen Sie fest, dass eine Variable eine höhere Lebensdauer hat als das enthaltende Element
Wenn es sich bei der Variablen um eine lokale Variable (deklariert in einer Prozedur) handelt, fügen Sie das Static-Schlüsselwort in die Dim-Anweisung (Visual Basic) ein, mit der sie deklariert wird. Eine statische Variable existiert so lange wie die Klasse oder das Modul, das die Prozedur enthält, in der die Variable deklariert wird.
Wenn sich eine lokale Variable in einer Shared (Visual Basic)-Prozedur befindet, existieren die Prozedur und deren Variablen nur, solange die Anwendung ausgeführt wird. Verwenden Sie in diesem Fall das Static-Schlüsselwort nicht.
Wenn es sich bei der Variablen um eine Membervariable (deklariert in einer Klasse oder Struktur, außerhalb von Prozeduren) handelt, fügen Sie das Shared-Schlüsselwort in die Dim-Anweisung ein, mit der sie deklariert wird. Eine gemeinsam genutzte Variable ist nicht mit einer Instanz ihrer Klasse oder ihrer Struktur verknüpft, und sie existiert nur, solange die Anwendung ausgeführt wird. Sie können Static nicht für Membervariablen verwenden.
Wenn eine Membervariable in einem Modul deklariert wird, existiert sie stets, solange die Anwendung ausgeführt wird. Verwenden Sie in diesem Fall das Shared-Schlüsselwort nicht.
Beispiel
Im folgenden Beispiel wird eine Variable mit dem Static (Visual Basic)-Schlüsselwort deklariert. (Sie benötigen das Dim-Schlüsselwort nicht, wenn in der Dim-Anweisung (Visual Basic) ein Modifizierer wie Static verwendet wird.)
Function runningTotal(ByVal num As Integer) As Integer
Static applesSold As Integer
applesSold = applesSold + num
Return applesSold
End Function
Im vorhergehenden Beispiel existiert die Variable applesSold weiter, nachdem die runningTotal-Prozedur zum aufrufenden Code zurückgekehrt ist. Beim nächsten Aufruf von runningTotal bleibt der zuvor berechnete Wert von applesSold bestehen.
Wäre applesSold ohne Static deklariert worden, würden die gesammelten Werte nicht für Aufrufe von runningTotal erhalten bleiben. Beim nächsten Aufruf von runningTotal wäre applesSold neu erstellt und mit 0 initialisiert worden. Darüber hinaus hätte runningTotal einfach denselben Wert zurückgegeben, mit dem die Funktion aufgerufen wurde.
Kompilieren des Codes
Der Wert einer statischen lokalen Variablen kann bei ihrer Deklaration initialisiert werden. Wenn Sie ein Array als Static deklarieren, können sein Rang (die Anzahl der Dimensionen), die Länge jeder Dimension und die Werte der einzelnen Elemente initialisiert werden.
Statische Variablen mit demselben Namen
Statische Variablen mit demselben Namen können in mehreren Prozeduren deklariert werden. In einem solchen Fall gilt jede dieser Variablen für den Visual Basic-Compiler als separates Element. Die Initialisierung einer dieser Variablen wirkt sich nicht auf die Werte der anderen aus. Dasselbe gilt, wenn Sie eine Prozedur mit einer Reihe von Überladungen definieren und in jeder Überladung eine statische Variable mit demselben Namen deklarieren.
Enthaltende Elemente für statische Variablen
Es ist möglich, eine statische lokale Variable in einer Klasse, d. h. innerhalb einer Prozedur in dieser Klasse, zu deklarieren. Sie können eine statische lokale Variable jedoch nicht in einer Struktur deklarieren, sei es als Strukturmember oder als lokale Variable einer Prozedur innerhalb dieser Struktur.
Sicherheit
Im vorhergehenden Beispiel können Sie dieselbe Lebensdauer erzeugen, indem Sie applesSold auf Modulebene deklarieren. Wenn Sie den Gültigkeitsbereich der Variablen auf diese Weise ändern würden, hätte die Prozedur keinen exklusiven Zugriff mehr auf sie. Da in diesem Fall andere Prozeduren auf applesSold zugreifen und deren Wert ändern könnten, wäre die laufende Summe eventuell nicht zuverlässig, und die Codeverwaltung würde u. U. schwieriger.
Siehe auch
Konzepte
Merkmale deklarierter Elemente
Gültigkeitsbereich in Visual Basic
Zugriffsebenen in Visual Basic