Gültigkeitsbereich in Visual Basic

Der Gültigkeitsbereich eines deklarierten Elements beschreibt den Codesatz, der auf das Element verweisen kann, ohne seinen Namen zu qualifizieren oder es mithilfe einer Imports-Anweisung (.NET-Namespace und Typ) verfügbar zu machen. Der Gültigkeitsbereich für ein Element kann sich auf einer der folgenden Ebenen befinden:

Ebene

Beschreibung

Blockbereich

Das Element ist nur innerhalb des Codeblocks verfügbar, in dem es deklariert ist.

Prozedurbereich

Das Element ist für sämtlichen Code innerhalb der Prozedur verfügbar, in der es deklariert ist.

Modulbereich

Das Element ist nur innerhalb des Moduls, der Klasse oder der Struktur verfügbar, in der es deklariert ist.

Namespacebereich

Das Element ist für sämtlichen Code im Namespace verfügbar, in dem es deklariert ist.

Diese Ebenen des Gültigkeitsbereichs steigern sich vom engsten (Block) zum breitesten Bereich (Namespace), wobei der engste Gültigkeitsbereich bedeutet, dass nur ein sehr geringer Teil des Codes ohne Qualifizierung auf dieses Element verweisen darf. Weitere Informationen finden Sie unter "Gültigkeitsbereichsebenen" auf dieser Seite.

Festlegen des Gültigkeitsbereichs und Definieren von Variablen

Der Gültigkeitsbereich eines Elements wird bei seiner Deklaration angegeben. Der Gültigkeitsbereich kann von folgenden Faktoren abhängen:

  • Der Region (Block, Prozedur, Modul, Klasse oder Struktur), in der das Element deklariert wird

  • Dem Namespace, der die Deklaration des Elements enthält

  • Der Zugriffsebene, die Sie für dieses Element deklarieren

Gehen Sie sorgsam vor, wenn Sie Variablen mit denselben Namen und unterschiedlichen Gültigkeitsbereichen definieren, da dies zu unerwarteten Resultaten führen kann. Weitere Informationen finden Sie unter Verweise auf deklarierte Elemente (Visual Basic).

Gültigkeitsbereichsebenen

Ein Programmierelement steht innerhalb der Region zur Verfügung, in der es deklariert wurde. Der gesamte Code in derselben Region kann auf das Element verweisen, ohne den Namen anzugeben.

Blockbereich

Ein Block ist eine Reihe von Anweisungen, die von einleitenden und schließenden Deklarationsanweisungen wie den folgenden eingeschlossen sind:

  • Do und Loop

  • For [Each] und Next

  • If und End If

  • Select und End Select

  • SyncLock und End SyncLock

  • Try und End Try

  • While und End While

  • With und End With

Wenn Sie innerhalb eines Blocks eine Variable deklarieren, können Sie sie nur innerhalb dieses Blocks verwenden. Im folgenden Beispiel ist der Gültigkeitsbereich der Integervariablen cube der Block zwischen If und End If. Auf cube kann nicht mehr verwiesen werden, wenn die Ausführung des Blocks abgeschlossen ist.

If n < 1291 Then
    Dim cube As Integer
    cube = n ^ 3
End If

Tipp

Auch wenn der Gültigkeitsbereich einer Variablen auf einen Block beschränkt ist, entspricht ihre Lebensdauer der der gesamten Prozedur. Wenn der Block mehrmals innerhalb der Prozedur ausgeführt wird, behält jede Blockvariable den vorhergehenden Wert bei. Wenn Sie in einem solchen Fall unerwartete Ergebnisse vermeiden möchten, sollten Sie die Blockvariablen zu Beginn des Blocks initialisieren.

Prozedurbereich

Ein in einer Prozedur deklariertes Element ist außerhalb dieser Prozedur nicht verfügbar. Es kann nur von der Prozedur verwendet werden, die die Deklaration enthält. Elemente auf dieser Ebene werden auch als lokale Variablen bezeichnet. Sie werden mit der Dim-Anweisung (Visual Basic) und optional mit dem Static (Visual Basic)-Schlüsselwort deklariert.

Der Prozedurbereich und der Blockbereich stehen in engem Zusammenhang. Wenn Sie eine Variable innerhalb einer Prozedur, aber außerhalb aller Blöcke in dieser Prozedur deklarieren, erstreckt sich der Gültigkeitsbereich der Variablen über den Block, wobei der Block die gesamte Prozedur ist.

Tipp

Alle lokalen Elemente (auch wenn es sich um Static-Variablen handelt) sind für die Prozedur, in der sie auftreten, privat. Sie können innerhalb einer Prozedur Elemente nicht mithilfe des Public (Visual Basic)-Schlüsselworts deklarieren.

Modulbereich

Der Einfachheit halber gilt der Begriff Modulebene gleichermaßen für Module, Klassen und Strukturen. Sie können auf dieser Ebene Elemente deklarieren, indem Sie die Deklarationsanweisung außerhalb jeder Prozedur und jedes Blocks, aber im Modul, in der Klasse oder in der Struktur platzieren.

Wenn Sie eine Deklaration auf Modulebene vornehmen, bestimmt die gewählte Zugriffsebene den Gültigkeitsbereich. Der Namespace, der das Modul, die Klasse oder die Struktur enthält, wirkt sich ebenfalls auf den Gültigkeitsbereich aus.

Eine ITrackingPoint, die nicht NULL ist. Für die Dim-Anweisung auf Modulebene wird der Standardwert Private festgelegt, wenn keine Schlüsselwörter für die Zugriffsebene angegeben werden. Sie können jedoch Gültigkeitsbereich und Zugriffsebene deutlicher kennzeichnen, indem Sie das Private-Schlüsselwort in der Dim-Anweisung verwenden.

Im folgenden Beispiel können alle im Modul definierten Prozeduren auf die Zeichenfolgenvariable strMsg verweisen. Wenn die zweite Prozedur aufgerufen wird, wird der Inhalt der Zeichenfolgenvariablen strMsg in einem Dialogfeld angezeigt.

' Put the following declaration at module level (not in any procedure).
Private strMsg As String
' Put the following Sub procedure in the same module.
Sub initializePrivateVariable()
    strMsg = "This variable cannot be used outside this module."
End Sub
' Put the following Sub procedure in the same module.
Sub usePrivateVariable()
    MsgBox(strMsg)
End Sub

Namespacebereich

Wenn Sie auf Modulebene ein Element mithilfe des Friend (Visual Basic)-Schlüsselworts oder des Public (Visual Basic)-Schlüsselworts deklarieren, steht es allen Prozeduren des gesamten Namespace zur Verfügung, in dem das Element deklariert wird. Durch die folgende Änderung des oben stehenden Beispiels kann der Code an einer beliebigen Stelle im Namespace der Deklaration auf die Zeichenfolgenvariable strMsg verweisen.

' Include this declaration at module level (not inside any procedure).
Public strMsg As String

Der Namespacebereich enthält geschachtelte Namespaces. Ein innerhalb eines Namespace verfügbares Element ist ebenso in jedem geschachtelten Namespace verfügbar, der sich in diesem Namespace befindet.

Wenn das Projekt keine Namespace-Anweisungen enthält, befindet sich das gesamte Projekt im selben Namespace. In diesem Fall kann der Namespacebereich als Projektumfang verstanden werden. Public-Elemente in einem Modul, einer Klasse oder Struktur stehen auch jedem Projekt zur Verfügung, das auf ihr Projekt verweist.

Auswahl des Gültigkeitsbereichs

Wenn Sie eine Variable deklarieren, sollten Sie bei der Auswahl des Gültigkeitsbereichs der Variablen folgende Punkte beachten.

Vorteile lokaler Variablen

Lokale Variablen eignen sich aus folgenden Gründen gut für alle Arten temporärer Berechnungen:

  • Namenskonfliktvermeidung. Bei lokalen Variablennamen treten keine Namenskonflikte auf. Sie können z. B. mehrere verschiedene Prozeduren erstellen, die eine Variable mit dem Namen intTemp enthalten. Solange intTemp jedes Mal als lokale Variable deklariert wird, erkennen die einzelnen Prozeduren nur ihre eigene Version von intTemp. Jede Prozedur kann den Wert in ihrer lokalen intTemp ändern, ohne dass sich dies auf intTemp-Variablen in anderen Prozeduren auswirkt.

  • Speicherverbrauch. Lokale Variablen belegen nur dann Arbeitsspeicher, wenn ihre Prozedur aktiv ist. Der Arbeitsspeicher wird wieder freigegeben, wenn die Prozedur zum aufrufenden Code zurückkehrt. Dagegen belegen Shared (Visual Basic)-Variablen und Static (Visual Basic)-Variablen Speicherressourcen, bis die Anwendung beendet wird. Sie sollten Sie daher nur verwenden, wenn dies notwendig ist. Instanzvariablen belegen Arbeitsspeicher, solange ihre Instanz weiter existiert. Dadurch sind sie zwar weniger effizient als lokale Variablen, jedoch potenziell effizienter als Shared-Variablen oder Static-Variablen.

Minimieren des Gültigkeitsbereichs

Im Allgemeinen ist es guter Programmierstil, den Gültigkeitsbereich beim Deklarieren einer Variablen oder Konstanten so weit wie möglich einzugrenzen (der Blockbereich ist der engste). Dadurch wird Speicherplatz gespart und das Risiko verringert, dass der Code irrtümlich auf eine falsche Variable verweist. Desgleichen sollte eine Variable nur dann als Static (Visual Basic) deklariert werden, wenn ihr Wert über mehrere Prozeduraufrufe hinweg erhalten bleiben muss.

Siehe auch

Aufgaben

Gewusst wie: Steuern des Gültigkeitsbereichs einer Variablen (Visual Basic)

Konzepte

Merkmale deklarierter Elemente (Visual Basic)

Lebensdauer in Visual Basic

Zugriffsebenen in Visual Basic

Variablendeklaration in Visual Basic

Weitere Ressourcen

Verweise auf deklarierte Elemente (Visual Basic)