Geschichte der Frage
Lokale Variablen in Visual Basic sind Variablen, die innerhalb einer Methode, Prozedur, Schleife oder eines verschachtelten Blocks deklariert werden. Der Mechanismus des Geltungsbereichs (scope) wurde von VB6 zu VB.NET verfeinert, Regeln für Shadowing und Einschränkungen in verschachtelten Blöcken wurden hinzugefügt.
Problem
Ein häufiger Fehler ist die Deklaration von Variablen mit dem gleichen Namen im äußeren und im inneren Block, was zu Shadowing und unerwarteten Ergebnissen führen kann. Eine falsche Initialisierung solcher Variablen kann Bugs verursachen und die Code-Klarheit verringern.
Lösung
Deklarieren Sie Variablen im minimal notwendigen Geltungsbereich. Vermeiden Sie Shadowing, verwenden Sie einzigartige Namen in verschachtelten Blöcken. Für Bereiche mit dem gleichen Namen (zum Beispiel "i" in zwei Schleifen) verwenden Sie unterschiedliche Namen oder überschneiden Sie die Schleifen nicht.
Beispielcode:
Sub Demo() Dim value As Integer = 10 If value > 5 Then Dim message As String = "Größer als fünf" Console.WriteLine(message) End If ' message ist hier nicht verfügbar, verursacht einen Fehler End Sub
Wichtige Merkmale:
Was passiert, wenn eine Variable innerhalb einer Schleife mit dem gleichen Namen wie außen deklariert wird?
Die innere Variable maskiert (shadows) die äußere innerhalb des Blocks. Nach dem Ende des Blocks wird das äußere Exemplar wieder aktuell.
Dim x As Integer = 1 For i = 1 To 2 Dim x As Integer = i * 10 ' shadows äußeres x Console.WriteLine(x) ' 10, dann 20 Next Console.WriteLine(x) ' 1
Wie funktioniert der Geltungsbereich bei verschachtelten Prozeduren (Sub/Function) innerhalb einer Klasse?
Die verschachtelte Prozedur hat ihren eigenen Geltungsbereich, sie "sieht" die Variablen außerhalb nicht, außer denjenigen, die als Parameter übergeben werden.
Kann man in verschiedenen Prozeduren die gleichen Variablennamen verwenden?
Ja, das ist gängige Praxis. Eine lokale Variable einer Methode beeinflusst eine andere nicht, selbst wenn sie den gleichen Namen trägt.
Deklaration einer Variable mit dem gleichen Namen innerhalb von zwei verschachtelten Blöcken, was zu Verwirrung und falschen Berechnungsergebnissen führte.
Vorteile:
Nachteile:
Verwendung einzigartiger Namen in inneren Blöcken, klar kommentierter Geltungsbereich jeder Variablen, kein Namensüberschneidungen.
Vorteile:
Nachteile: