In Visual Basic wird der Gültigkeitsbereich von Variablen durch den Ort ihrer Deklaration bestimmt: innerhalb einer Prozedur (lokale Variable), auf Klassen-/Modulebene (Klassen- oder Modulvariable) oder global (in einer separaten Datei).
Dim innerhalb einer Prozedur — die Variable ist nur in dieser Prozedur verfügbar.Dim auf Klassen- oder Modul-Ebene — verfügt innerhalb aller Prozeduren der Klasse/des Moduls.Public, Private, Friend — legt Beschränkungen für den Zugriff aus anderen Klassen/Modulen fest.Beispiel:
Module Module1 Dim moduleVar As Integer = 5 Sub Main() Dim localVar As Integer = 10 Console.WriteLine(moduleVar) ' Verfügbar Console.WriteLine(localVar) ' Verfügbar End Sub Sub OtherSub() Console.WriteLine(moduleVar) ' Verfügbar Console.WriteLine(localVar) ' Fehler! End Sub End Module
Welchen Gültigkeitsbereich hat eine mit
Staticinnerhalb einer Prozedur deklarierte Variable?
Antwort:
Eine mit dem Schlüsselwort Static innerhalb einer Prozedur deklarierte Variable bleibt nur innerhalb dieser Prozedur verfügbar, ihr Wert bleibt jedoch zwischen den Aufrufen der Prozedur erhalten.
Beispiel:
Sub Counter() Static count As Integer count = count + 1 Console.WriteLine(count) End Sub ' Jeder Aufruf von Counter erhöht count
Geschichte
In einem Projekt wurde eine Flag-Variable Dim x As Boolean innerhalb einer For-Schleife deklariert, in der Annahme, dass sie bei jedem Betreten einer neuen Iteration "zurückgesetzt" wird (wie in einigen anderen Sprachen). Aber nach dem Verlassen der Schleife blieb die Variable verfügbar, was nach dem zweiten Aufruf der Prozedur zu unvorhersehbarem Verhalten führte.
Geschichte
Ein Programmierer hat eine öffentliche Variable in einem Modul deklariert, und sie wurde versehentlich von einem anderen Modul mit demselben Namen überschrieben, was zu kritischen Fehlern in verschiedenen Teilen des Programms führte. Das erschwerte das Debugging und niemand konnte die Ursache verstehen.
Geschichte
Ein Student hat eine Static-Variable zum Speichern einer Summe in einer Unterprozedur deklariert, in der Annahme, dass sie bei jedem Aufruf "gelöscht" wird. Das Ergebnis — bei wiederholten Aufrufen wuchs die Summe und lieferte ein falsches Ergebnis.