Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der Bereich eines deklarierten Elements ist die Menge aller Codes, die darauf verweisen können, ohne seinen Namen zu qualifizieren oder es über eine Imports-Anweisung (.NET-Namespace und -Typ) verfügbar zu machen. Ein Element kann einen Bereich auf einer der folgenden Ebenen aufweisen:
Niveau | BESCHREIBUNG |
---|---|
Blockbereich | Nur innerhalb des Codeblocks verfügbar, in dem er deklariert wird |
Prozedurbereich | Verfügbar für den gesamten Code innerhalb der Prozedur, in der sie deklariert wird |
Modulbereich | Verfügbar für den gesamten Code innerhalb des Moduls, der Klasse oder der Struktur, in der er deklariert wird |
Namespacebereich | Verfügbar für den gesamten Code im Namespace, in dem er deklariert wird |
Diese Ebenen des Bereichsfortschritts vom schmalsten (Block) zum weitesten (Namespace), wobei der schmalste Bereich den kleinsten Codesatz bedeutet, der ohne Qualifikation auf das Element verweisen kann. Auf dieser Seite finden Sie unter 'Ebenen des Bereichs' weitere Informationen.
Angeben des Bereichs und Definieren von Variablen
Sie geben den Bereich eines Elements an, wenn Sie es deklarieren. Der Bereich kann von den folgenden Faktoren abhängen:
Der Bereich (Block, Prozedur, Modul, Klasse oder Struktur), in dem Sie das Element deklarieren
Der Namespace, der die Deklaration des Elements enthält
Die Zugriffsstufe, die Sie für das Element deklarieren
Verwenden Sie die Sorgfalt, wenn Sie Variablen mit demselben Namen, aber unterschiedlichen Bereich definieren, da dies zu unerwarteten Ergebnissen führen kann. Weitere Informationen finden Sie unter Verweise auf deklarierte Elemente.
Bereichsebenen
Ein Programmierelement ist in der gesamten Region verfügbar, in der Sie es deklarieren. Der gesamte Code in derselben Region kann auf das Element verweisen, ohne den Namen qualifizieren zu müssen.
Blockbereich
Ein Block ist eine Reihe von Anweisungen, die in initiierende und beendende Deklarationsanweisungen eingeschlossen sind, z. B. die folgenden:
Do
undLoop
For
[Each
] undNext
If
undEnd If
Select
undEnd Select
SyncLock
undEnd SyncLock
Try
undEnd Try
While
undEnd While
With
undEnd With
Wenn Sie eine Variable innerhalb eines Blocks deklarieren, können Sie sie nur innerhalb dieses Blocks verwenden. Im folgenden Beispiel ist der Gültigkeitsbereich der ganzzahligen Variable cube
der Block zwischen If
und End If
, und Sie können cube
nicht mehr darauf verweisen, wenn die Ausführung den Block verlässt.
If n < 1291 Then
Dim cube As Integer
cube = n ^ 3
End If
Hinweis
Auch wenn der Bereich einer Variablen auf einen Block beschränkt ist, ist die Lebensdauer der gesamten Prozedur noch vorhanden. Wenn Sie den Block während der Prozedur mehrmals eingeben, behält jede Blockvariable den vorherigen Wert bei. Um unerwartete Ergebnisse in einem solchen Fall zu vermeiden, ist es ratsam, Blockvariablen am Anfang des Blocks zu initialisieren.
Prozedurumfang
Ein in einer Prozedur deklariertes Element ist außerhalb dieser Prozedur nicht verfügbar. Nur die Prozedur, die die Deklaration enthält, kann sie verwenden. Variablen auf dieser Ebene werden auch als lokale Variablen bezeichnet. Sie deklarieren sie mit der Dim-Anweisung mit oder ohne das Static-Schlüsselwort .
Der Prozedurbereich und der Blockbereich sind eng miteinander verknüpft. Wenn Sie eine Variable innerhalb einer Prozedur, aber außerhalb eines Blocks innerhalb dieser Prozedur deklarieren, können Sie sich die Variable als Blockbereich vorstellen, wobei der Block die gesamte Prozedur ist.
Hinweis
Alle lokalen Elemente, auch wenn sie Variablen sind Static
, sind privat für die Prozedur, in der sie angezeigt werden. Sie können kein Element mithilfe des Schlüsselworts Public innerhalb einer Prozedur deklarieren.
Modulbereich
Der Einfachheit halber gilt der Begriff der Modulebene gleichermaßen für Module, Klassen und Strukturen. Sie können Elemente auf dieser Ebene deklarieren, indem Sie die Deklarationsanweisung außerhalb einer Prozedur oder eines Blocks, jedoch innerhalb des Moduls, der Klasse oder der Struktur platzieren.
Wenn Sie eine Deklaration auf Modulebene vornehmen, bestimmt die von Ihnen ausgewählte Zugriffsebene den Bereich. Der Namespace, der das Modul, die Klasse oder die Struktur enthält, wirkt sich auch auf den Bereich aus.
Elemente, für die Sie private Zugriffsebene deklarieren, stehen für jede Prozedur in diesem Modul, aber nicht für Code in einem anderen Modul zur Verfügung. Die Dim
-Anweisung auf Modulebene wird standardmäßig zu Private
gesetzt, wenn Sie keine Schlüsselwörter auf Zugriffsebene verwenden. Sie können den Bereich und die Zugriffsebene jedoch deutlicher machen, 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 Zeichenfolgenvariable 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
Geltungsbereich des Namespace
Wenn Sie ein Element auf Modulebene mit dem Schlüsselwort Friend oder Public deklarieren, wird es für alle Prozeduren im gesamten Namespace verfügbar, in dem das Element deklariert wird. Mit der folgenden Änderung des vorherigen Beispiels kann die Zeichenfolgenvariable strMsg
von Code an einer beliebigen Stelle im Namespace der Deklaration referenziert werden.
' Include this declaration at module level (not inside any procedure).
Public strMsg As String
Der Namespacebereich umfasst geschachtelte Namespaces. Ein Element, das in einem Namespace verfügbar ist, ist auch in jedem Namespace verfügbar, der in diesem Namespace geschachtelt ist.
Wenn Ihr Projekt keine Namespace-Anweisungenenthält, befindet sich alles im Projekt im selben Namespace. In diesem Fall kann der Namensraum als Projektbereich betrachtet werden. Public
Elemente in einem Modul, einer Klasse oder einer Struktur stehen auch allen Projekten zur Verfügung, die auf ihr Projekt verweisen.
Auswahl des Bereichs
Wenn Sie eine Variable deklarieren, sollten Sie beim Auswählen des Bereichs die folgenden Punkte berücksichtigen.
Vorteile lokaler Variablen
Lokale Variablen sind aus folgenden Gründen eine gute Wahl für jede Art temporärer Berechnungen:
Namenskonfliktvermeidung. Lokale Variablennamen sind nicht anfällig für Konflikte. Sie können beispielsweise mehrere Prozeduren erstellen, die eine Variable namens
intTemp
enthalten. Solange jedeintTemp
als lokale Variable deklariert wird, erkennt jede Prozedur nur ihre eigene Version vonintTemp
. Jede Prozedur kann den Wert in ihrem lokalenintTemp
ändern, ohneintTemp
Variablen in anderen Prozeduren zu beeinträchtigen.Arbeitsspeicherverbrauch. Lokale Variablen verbrauchen nur Arbeitsspeicher, während ihre Prozedur ausgeführt wird. Ihr Arbeitsspeicher wird freigegeben, wenn die Prozedur zum aufrufenden Code zurückkehrt. Im Gegensatz dazu verbrauchen freigegebene und statische Variablen Arbeitsspeicherressourcen, bis die Anwendung nicht mehr ausgeführt wird. Verwenden Sie sie daher nur bei Bedarf. Instanzenvariablen verbrauchen Arbeitsspeicher, während ihre Instanz weiterhin vorhanden ist, wodurch sie weniger effizient als lokale Variablen, aber potenziell effizienter als
Shared
oderStatic
Variablen sind.
Minimieren des Umfangs
Im Allgemeinen ist es eine gute Vorgehensweise in der Programmierung, beim Deklarieren einer Variablen oder Konstanten den Bereich so schmal wie möglich zu gestalten (der Blockbereich ist der engste). Dies trägt dazu bei, Arbeitsspeicher zu sparen und die Wahrscheinlichkeit zu minimieren, dass der Code falsch auf die falsche Variable verweist. Ebenso sollten Sie eine Variable nur dann als statisch deklarieren, wenn sie erforderlich ist, um den Wert zwischen Prozeduraufrufen beizubehalten.