In Visual Basic verlieren Variablen innerhalb von Prozeduren normalerweise nach dem Ende des Aufrufs ihren Wert. Das Schlüsselwort Static ermöglicht es einer Variablen, ihren Wert zwischen den Aufrufen der Prozedur zu speichern.
Hintergrund:
In klassischem Visual Basic (VB6) und VB.NET wurde Static häufig verwendet, um Zähler und Flags zu erstellen, ohne Klassen- oder Modulvariablen zu verwenden.
Problem:
Ein Entwickler könnte erwarten, dass normale lokale Variablen „beständig“ sind, während sie bei jedem Aufruf zurückgesetzt werden. Andererseits könnte der gewählte Ort (Der Rumpf der Prozedur oder Codeblock) für die statische Variable fehlerhaft sein.
Lösung:
Deklarieren Sie die Variable mit Static innerhalb der Prozedur. Sie wird einmal beim ersten Aufruf der Prozedur initialisiert und speichert dann ihren Wert zwischen den Aufrufen.
Beispiel-Code:
Sub CountCalls() Static counter As Integer = 0 counter += 1 Console.WriteLine($"Aufruf Nummer: {counter}") End Sub ' Aufrufe führen zu unterschiedlichen Werten CountCalls() ' 1 CountCalls() ' 2 CountCalls() ' 3
Hauptmerkmale:
Static-Variable existiert nur im Sichtbarkeitsbereich der Prozedur, behält aber ihren Wert zwischen Aufrufen.Was ist der Unterschied zwischen Static in einer Prozedur und einem Klassenfeld mit dem Modifikator Shared?
Die Static-Variable wirkt nur in dieser Prozedur – jede Instanz der Methode erhält ihre eigene unabhängige statische Variable. Das Shared-Feld der Klasse ist für die gesamte Klasse einzigartig.
Kann eine Static-Variable in einem For- oder If-Block deklariert werden?
Nein, Static-Variablen werden nur auf oberster Ebene der Prozedur deklariert und dürfen nicht innerhalb von geschachtelten Blöcken (For, If) deklariert werden.
Was passiert, wenn eine Prozedur mit Static von mehreren Threads aufgerufen wird?
In der VB.NET-Version ist der Bereich der Static-Variablen an jeden Thread gebunden, was eine Race-Condition und unerwartete Werte bei mehrfachen Aufrufen in einem Multithreading-Szenario verursachen kann.
In einer Prozedur zur Berechnung der Benutzerreaktion auf einen Tastendruck wird Static verwendet, um die Zeit zu speichern, in der die Prozedur ausgelöst wird, aber gleichzeitig werden mehrere Benutzer, die gleichzeitig drücken, nicht berücksichtigt (z.B. bei einer Webanwendung oder einem multithreaded Fenster).
Vorteile:
Nachteile:
Static wird verwendet, um einen internen Zähler für einen Hilfsmethodenaufruf zu speichern, der nur synchron aus einem Thread aufgerufen wird.
Vorteile:
Nachteile: