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.
Deklariert und weist Speicherplatz für eine oder mehrere Variablen zu.
Syntax
[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] variablelist
Bestandteile
attributelistWahlfrei. Siehe Attributliste.
accessmodifierWahlfrei. Dabei kann es sich um eine der folgenden Methoden handeln:
SharedWahlfrei. Siehe Shared.
ShadowsWahlfrei. Siehe Shadows.
StaticWahlfrei. Siehe Statisch.
ReadOnlyWahlfrei. Siehe ReadOnly.
WithEventsWahlfrei. Gibt an, dass es sich hierbei um Objektvariablen handelt, die auf Instanzen einer Klasse verweisen, die Ereignisse auslösen können. Siehe WithEvents.
variablelistErforderlich. Liste der Variablen, die in dieser Anweisung deklariert werden.
variable [ , variable ... ]Jede
variableweist folgende Syntax und Bestandteile auf:variablename [ ( [ boundslist ] ) ] [ As [ New ] datatype [ With{[ .propertyname = propinitializer [ , ... ] ] } ] ] [ = initializer ]Teil BESCHREIBUNG variablenameErforderlich. Name der Variable. Siehe deklarierte Elementnamen. boundslistWahlfrei. Liste der Grenzen jeder Dimension einer Arrayvariable. NewWahlfrei. Erstellt eine neue Instanz der Klasse, wenn die DimAnweisung ausgeführt wird.datatypeWahlfrei. Datentyp der Variablen. WithWahlfrei. Führt die Objektinitialisierungsliste ein. propertynameWahlfrei. Der Name einer Eigenschaft in der Klasse, der Sie eine Instanz erstellen. propinitializerErforderlich nach propertyname=. Der Ausdruck, der ausgewertet und dem Eigenschaftennamen zugewiesen ist.initializerOptional, wenn Newnicht angegeben. Ausdruck, der ausgewertet und der Variablen zugewiesen wird, wenn sie erstellt wird.
Bemerkungen
Der Visual Basic-Compiler verwendet die Dim Anweisung, um den Datentyp der Variablen und andere Informationen zu bestimmen, z. B. welcher Code auf die Variable zugreifen kann. Im folgenden Beispiel wird eine Variable deklariert, die einen Integer Wert enthält.
Dim numberOfStudents As Integer
Sie können einen beliebigen Datentyp oder den Namen einer Enumeration, Struktur, Klasse oder Schnittstelle angeben.
Dim finished As Boolean
Dim monitorBox As System.Windows.Forms.Form
Für einen Verweistyp verwenden Sie das New Schlüsselwort, um eine neue Instanz der Klasse oder Struktur zu erstellen, die vom Datentyp angegeben wird. Wenn Sie verwenden New, verwenden Sie keinen Initialisierungsausdruck. Stattdessen geben Sie Argumente an den Konstruktor der Klasse an, aus der Sie die Variable erstellen.
Dim bottomLabel As New System.Windows.Forms.Label
Sie können eine Variable in einer Prozedur, einem Block, einer Klasse, einer Struktur oder einem Modul deklarieren. Sie können eine Variable in einer Quelldatei, einem Namespace oder einer Schnittstelle nicht deklarieren. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen.
Eine Variable, die auf Modulebene außerhalb einer Prozedur deklariert wird, ist eine Membervariable oder ein Elementfeld. Membervariablen befinden sich in der gesamten Klasse, Struktur oder des Moduls im Gültigkeitsbereich. Eine Variable, die auf Prozedurebene deklariert wird, ist eine lokale Variable. Lokale Variablen befinden sich nur innerhalb ihrer Prozedur oder ihres Blocks im Gültigkeitsbereich.
Die folgenden Zugriffsmodifizierer werden verwendet, um Variablen außerhalb einer Prozedur zu deklarieren: Public, , Protected, , Friendund Protected FriendPrivate. Weitere Informationen finden Sie unter Access-Ebenen in Visual Basic.
Das Dim Schlüsselwort ist optional und wird in der Regel weggelassen, wenn Sie einen der folgenden Modifizierer angeben: Public, , ProtectedFriend, Protected Friend, ShadowsSharedStaticPrivate, oder . ReadOnlyWithEvents
Public maximumAllowed As Double
Protected Friend currentUserName As String
Private salary As Decimal
Static runningTotal As Integer
Wenn Option Explicit der Compiler aktiviert ist (standard), erfordert der Compiler eine Deklaration für jede variable, die Sie verwenden. Weitere Informationen finden Sie unter Option Explicit Statement.
Angeben eines Anfangswerts
Sie können einer Variablen beim Erstellen einen Wert zuweisen. Für einen Werttyp verwenden Sie einen Initialisierer , um einen Ausdruck zur Verfügung zu stellen, der der Variablen zugewiesen werden soll. Der Ausdruck muss eine Konstante auswerten, die zur Kompilierungszeit berechnet werden kann.
Dim quantity As Integer = 10
Dim message As String = "Just started"
Wenn ein Initialisierer angegeben ist und kein Datentyp in einer As Klausel angegeben wird, wird die Typreferenz verwendet, um den Datentyp vom Initialisierer abzuleiten. Im folgenden Beispiel sind sowohl num1 als auch num2 stark als ganze Zahlen typisiert. Geben Sie in der zweiten Deklaration den Typ vom Wert 3 ab.
' Use explicit typing.
Dim num1 As Integer = 3
' Use local type inference.
Dim num2 = 3
Die Typreferenz wird auf Prozedurebene angewendet. Sie gilt nicht außerhalb einer Prozedur in einer Klasse, Struktur, einem Modul oder einer Schnittstelle. Weitere Informationen zum Typausschluss finden Sie unter Option Infer Statement and Local Type Inference.
Informationen dazu, was geschieht, wenn ein Datentyp oder Initialisierer nicht angegeben wird, finden Sie weiter unten in diesem Thema unter "Standarddatentypen und -werte ".
Sie können einen Objektinitialisierer verwenden, um Instanzen benannter und anonymer Typen zu deklarieren. Der folgende Code erstellt eine Instanz einer Student Klasse und verwendet einen Objektinitialisierer zum Initialisieren von Eigenschaften.
Dim student1 As New Student With {.First = "Michael",
.Last = "Tucker"}
Weitere Informationen zu Objektinitialisierern finden Sie unter How to: Declare an Object Initializer, Object Initializers: Named and Anonymous Types, and Anonymous Types.
Deklarieren mehrerer Variablen
Sie können mehrere Variablen in einer Deklarationsanweisung deklarieren, den Variablennamen für jeden angeben und jedem Arraynamen mit Klammern folgen. Mehrere Variablen werden durch Kommas getrennt.
Dim lastTime, nextTime, allTimes() As Date
Wenn Sie mehrere Variablen mit einer As Klausel deklarieren, können Sie keinen Initialisierer für diese Variablengruppe bereitstellen.
Sie können unterschiedliche Datentypen für unterschiedliche Variablen angeben, indem Sie für jede variable, die Sie deklarieren, eine separate As Klausel verwenden. Jede Variable verwendet den in der ersten As Klausel angegebenen Datentyp, der nach dem variablename Teil gefunden wurde.
Dim a, b, c As Single, x, y As Double, i As Integer
' a, b, and c are all Single; x and y are both Double
Felder
Sie können eine Variable deklarieren, um ein Array zu speichern, das mehrere Werte enthalten kann. Um anzugeben, dass eine Variable ein Array enthält, folgen Sie variablename sofort den Klammern. Weitere Informationen zu Arrays finden Sie unter Arrays.
Sie können die untere und obere Grenze jeder Dimension eines Arrays angeben. Fügen Sie dazu eine boundslist innerhalb der Klammern ein. Für jede Dimension gibt die boundslist Obergrenze und optional die untere Grenze an. Die untere Grenze ist immer null, unabhängig davon, ob Sie sie angeben. Jeder Index kann zwischen Null und oberer Grenze variieren.
Die folgenden beiden Anweisungen sind gleichwertig. Jede Anweisung deklariert ein Array von 21 Integer Elementen. Wenn Sie auf das Array zugreifen, kann der Index von 0 bis 20 variieren.
Dim totals(20) As Integer
Dim totals(0 To 20) As Integer
Die folgende Anweisung deklariert ein zweidimensionales Array vom Typ Double. Das Array weist jeweils 4 Zeilen (3 + 1) von 6 Spalten (5 + 1) auf. Beachten Sie, dass eine obere Grenze den höchsten möglichen Wert für den Index und nicht die Länge der Dimension darstellt. Die Länge der Dimension ist die obere Grenze plus 1.
Dim matrix2(3, 5) As Double
Ein Array kann zwischen 1 und 32 Dimensionen aufweisen.
Sie können alle Grenzen in einer Arraydeklaration leer lassen. Wenn Sie dies tun, weist das Array die Von Ihnen angegebene Anzahl von Dimensionen auf, ist jedoch nicht initialisiert. Es weist einen Wert auf, bis Nothing Sie mindestens einige seiner Elemente initialisieren. Die Dim Anweisung muss Grenzen für alle Dimensionen oder für keine Dimensionen angeben.
' Declare an array with blank array bounds.
Dim messages() As String
' Initialize the array.
ReDim messages(4)
Wenn das Array mehrere Dimensionen aufweist, müssen Sie Kommas zwischen den Klammern einschließen, um die Anzahl der Dimensionen anzugeben.
Dim oneDimension(), twoDimensions(,), threeDimensions(,,) As Byte
Sie können ein Array der Länge Null deklarieren, indem Sie eine der Dimensionen des Arrays als -1 deklarieren. Eine Variable, die ein Array der Länge Null enthält, weist keinen Wert Nothingauf. Arrays der Länge Null sind für bestimmte Common Language Runtime-Funktionen erforderlich. Wenn Sie versuchen, auf ein solches Array zuzugreifen, tritt eine Laufzeit-Ausnahme auf. Weitere Informationen finden Sie unter Arrays.
Sie können die Werte eines Arrays mithilfe eines Arrayliterals initialisieren. Um dies zu tun, setzen Sie die Initialisierungswerte in geschweifte Klammern ({}).
Dim longArray() As Long = {0, 1, 2, 3}
Bei mehrdimensionalen Arrays wird die Initialisierung für jede separate Dimension in geschweifte Klammern in der äußeren Dimension eingeschlossen. Die Elemente werden in Der Zeilen-Hauptreihenfolge angegeben.
Dim twoDimensions(,) As Integer = {{0, 1, 2}, {10, 11, 12}}
Weitere Informationen zu Arrayliteralen finden Sie unter Arrays.
Standarddatentypen und -werte
In der folgenden Tabelle werden die Ergebnisse verschiedener Kombinationen zum Angeben des Datentyps und des Initialisierers in einer Dim Anweisung beschrieben.
| Der angegebene Datentyp? | Initialisierer angegeben? | Beispiel | Ergebnis |
|---|---|---|---|
| Nein | Nein | Dim qty |
Wenn Option Strict deaktiviert ist (standard), wird die Variable auf Nothing.Falls Option Strict aktiviert, tritt ein Kompilierungszeitfehler auf. |
| Nein | Ja | Dim qty = 5 |
Wenn Option Infer aktiviert ist (Standardeinstellung), übernimmt die Variable den Datentyp des Initialisierers. Siehe "Lokale Typinference". Wenn Option Infer deaktiviert und Option Strict deaktiviert ist, übernimmt die Variable den Datentyp von Object.Wenn Option Infer deaktiviert und Option Strict aktiviert ist, tritt ein Kompilierungszeitfehler auf. |
| Ja | Nein | Dim qty As Integer |
Die Variable wird auf den Standardwert für den Datentyp initialisiert. Weitere Informationen finden Sie in der Tabelle weiter unten in diesem Abschnitt. |
| Ja | Ja | Dim qty As Integer = 5 |
Wenn der Datentyp des Initialisierers nicht in den angegebenen Datentyp konvertierbar ist, tritt ein Kompilierungszeitfehler auf. |
Wenn Sie einen Datentyp angeben, aber keinen Initialisierer angeben, initialisiert Visual Basic die Variable auf den Standardwert für den Datentyp. In der folgenden Tabelle sind die Standardinitialisierungswerte aufgeführt.
| Datentyp | Standardwert |
|---|---|
Alle numerischen Typen (einschließlich Byte und SByte) |
0 |
Char |
Binär 0 |
Alle Referenztypen (einschließlich Object, Stringund alle Arrays) |
Nothing |
Boolean |
False |
Date |
12:00 Uhr vom 1. Januar des Jahres (01.01.01.001 12:00:00 Uhr) |
Jedes Element einer Struktur wird initialisiert, als wäre es eine separate Variable. Wenn Sie die Länge eines Arrays deklarieren, dessen Elemente jedoch nicht initialisieren, wird jedes Element initialisiert, als wäre es eine separate Variable.
Statische lokale Variablenlebensdauer
Eine Static lokale Variable hat eine längere Lebensdauer als die der Prozedur, in der sie deklariert wird. Die Grenzen der Lebensdauer der Variablen hängen davon ab, wo die Prozedur deklariert wird und ob sie sich befindet Shared.
| Prozedurdeklaration | Variable initialisiert | Variable stoppt vorhandene |
|---|---|---|
| In einem Modul | Das erste Mal, wenn die Prozedur aufgerufen wird | Wenn die Ausführung des Programms beendet wird |
In einer Klasse oder Struktur ist die Prozedur Shared |
Das erste Mal, wenn die Prozedur entweder für eine bestimmte Instanz oder für die Klasse oder Struktur selbst aufgerufen wird | Wenn die Ausführung des Programms beendet wird |
In einer Klasse oder Struktur ist die Prozedur nicht Shared |
Das erste Mal, wenn die Prozedur für eine bestimmte Instanz aufgerufen wird | Wenn die Instanz für die Garbage Collection (GC, automatische Speicherbereinigung) freigegeben wird |
Attribute und Modifizierer
Sie können Attribute nur auf Membervariablen und nicht auf lokale Variablen anwenden. Ein Attribut trägt Informationen zu den Metadaten der Assembly bei, was für temporären Speicher wie lokale Variablen nicht sinnvoll ist.
Auf Modulebene können Sie den Static Modifizierer nicht verwenden, um Membervariablen zu deklarieren. Auf Prozedurebene können Sie keine Zugriffsmodifizierer verwendenSharedShadowsReadOnlyWithEvents, um lokale Variablen zu deklarieren.
Sie können angeben, welcher Code auf eine Variable zugreifen kann, indem Sie eine accessmodifier. Klassen- und Modulmemmembvariablen (außerhalb einer Prozedur) standardmäßig für den privaten Zugriff und Strukturmememmvariablen für den öffentlichen Zugriff. Sie können ihre Zugriffsebenen mit den Zugriffsmodifizierern anpassen. Sie können keine Zugriffsmodifizierer für lokale Variablen (innerhalb einer Prozedur) verwenden.
Sie können nur für Membervariablen und nicht für lokale Variablen innerhalb einer Prozedur angeben WithEvents . Wenn Sie angeben WithEvents, muss der Datentyp der Variablen ein bestimmter Klassentyp sein, nicht Object. Sie können kein Array mit WithEvents. Weitere Informationen zu Ereignissen finden Sie unter "Ereignisse".
Hinweis
Code außerhalb einer Klasse, Struktur oder eines Moduls muss den Namen einer Membervariable mit dem Namen dieser Klasse, Struktur oder dieses Moduls qualifizieren. Code außerhalb einer Prozedur oder eines Blocks kann nicht auf lokale Variablen innerhalb dieser Prozedur oder eines Blocks verweisen.
Freigeben verwalteter Ressourcen
Der .NET Framework Garbage Collector verworfen verwaltete Ressourcen ohne zusätzlichen Codierer auf Ihrem Teil. Sie können jedoch die Entsorgung einer verwalteten Ressource erzwingen, anstatt auf den Garbage Collector zu warten.
Wenn eine Klasse eine besonders wertvolle und knappe Ressource (z. B. eine Datenbankverbindung oder ein Dateihandle) enthält, sollten Sie möglicherweise nicht warten, bis die nächste Garbage Collection eine Klasseninstanz bereinigt, die nicht mehr verwendet wird. Eine Klasse kann die IDisposable Schnittstelle implementieren, um Ressourcen vor einer Garbage Collection freizugeben. Eine Klasse, die diese Schnittstelle implementiert, macht eine Dispose Methode verfügbar, die aufgerufen werden kann, um zu erzwingen, dass wertvolle Ressourcen sofort freigegeben werden.
Die Using Anweisung automatisiert den Vorgang des Abrufens einer Ressource, das Ausführen einer Reihe von Anweisungen und das anschließende Löschen der Ressource. Die Ressource muss jedoch die IDisposable Schnittstelle implementieren. Weitere Informationen finden Sie unter Using Statement.
Beispiel 1
Im folgenden Beispiel werden Variablen mithilfe der Dim Anweisung mit verschiedenen Optionen deklariert.
' Declare and initialize a Long variable.
Dim startingAmount As Long = 500
' Declare a local variable that always retains its value,
' even after its procedure returns to the calling code.
Static totalSales As Double
' Declare a variable that refers to an array.
Dim highTemperature(31) As Integer
' Declare and initialize an array variable that
' holds four Boolean check values.
Dim checkValues() As Boolean = {False, False, True, False}
Beispiel 2
Im folgenden Beispiel werden die Primzahlen zwischen 1 und 30 aufgelistet. Der Bereich der lokalen Variablen wird in Codekommentaren beschrieben.
Public Sub ListPrimes()
' The sb variable can be accessed only
' within the ListPrimes procedure.
Dim sb As New System.Text.StringBuilder()
' The number variable can be accessed only
' within the For...Next block. A different
' variable with the same name could be declared
' outside of the For...Next block.
For number As Integer = 1 To 30
If CheckIfPrime(number) = True Then
sb.Append(number.ToString & " ")
End If
Next
Debug.WriteLine(sb.ToString)
' Output: 2 3 5 7 11 13 17 19 23 29
End Sub
Private Function CheckIfPrime(ByVal number As Integer) As Boolean
If number < 2 Then
Return False
Else
' The root and highCheck variables can be accessed
' only within the Else block. Different variables
' with the same names could be declared outside of
' the Else block.
Dim root As Double = Math.Sqrt(number)
Dim highCheck As Integer = Convert.ToInt32(Math.Truncate(root))
' The div variable can be accessed only within
' the For...Next block.
For div As Integer = 2 To highCheck
If number Mod div = 0 Then
Return False
End If
Next
Return True
End If
End Function
Beispiel 3
Im folgenden Beispiel wird die speedValue Variable auf Klassenebene deklariert. Das Private Schlüsselwort wird verwendet, um die Variable zu deklarieren. Auf die Variable kann von jeder Prozedur in der Car Klasse zugegriffen werden.
' Create a new instance of a Car.
Dim theCar As New Car()
theCar.Accelerate(30)
theCar.Accelerate(20)
theCar.Accelerate(-5)
Debug.WriteLine(theCar.Speed.ToString)
' Output: 45
Public Class Car
' The speedValue variable can be accessed by
' any procedure in the Car class.
Private speedValue As Integer = 0
Public ReadOnly Property Speed() As Integer
Get
Return speedValue
End Get
End Property
Public Sub Accelerate(ByVal speedIncrease As Integer)
speedValue += speedIncrease
End Sub
End Class
Siehe auch
- Const-Anweisung
- ReDim-Anweisung
- Option Explicit-Anweisung
- Option Infer-Anweisung
- Option Strict-Anweisung
- Kompilierungsseite, Project Designer (Visual Basic)
- Variablendeklaration
- Arrays
- Objektinitialisierer: Benannte und anonyme Typen
- Anonyme Typen
- Objektinitialisierer: Benannte und anonyme Typen
- Vorgehensweise: Deklarieren eines Objekts mithilfe eines Objektinitialisierungsprogramms
- Lokaler Typrückschluss