Dim-Anweisung (Visual Basic)

Deklariert und reserviert Speicherplatz für eine oder mehrere Variablen.

[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ] 
Dim [ WithEvents ] variablelist

Bestandteile

Ausdruck

Definition

attributelist

Optional. Siehe Attributliste.

accessmodifier

Optional. Einer der folgenden Werte ist möglich:

Weitere Informationen finden Sie unter Zugriffsebenen in Visual Basic.

Shared

Optional. Siehe Shared.

Shadows

Optional. Siehe Shadows.

Static

Optional. Siehe Static.

ReadOnly

Optional. Siehe ReadOnly.

WithEvents

Optional. Gibt an, dass diese Objektvariablen sind, die auf Instanzen einer Klasse verweisen, Ereignisse auslösen können. Siehe WithEvents.

variablelist

Erforderlich. Liste der Variablen, die in dieser Anweisung deklariert werden.

variable [ , variable ... ]

Jede variable hat folgende Syntax und folgende Bestandteile:

variablename [ ( [ boundslist ] ) ] [ As [ New ] datatype [ With { [ .propertyname = propinitializer [ , ... ] ] } ] ] [ = initializer ]

BestandteilBeschreibungen
variablename Erforderlich.Name der Variablen.Weitere Informationen finden Sie unter Namen deklarierter Elemente (Visual Basic).
boundslist Optional.Liste der Grenzen jeder Dimension einer Arrayvariablen.
New Optional.Erstellt eine neue Instanz der Klasse, wenn die Dim-Anweisung ausgeführt wird.
datatype Optional.Datentyp der Variablen.
With Optional.Leitet die Objektinitialisiererliste ein.
propertyname Optional.Der Name einer Eigenschaft in der Klasse, von der eine Instanz erstellt wird.
propinitializer Erforderlich nach propertyname =.Der Ausdruck, der ausgewertet und dem Eigenschaftennamen zugewiesen wird.
initializer Optional, wenn New nicht angegeben wird.Ausdruck, der ausgewertet und der Variablen bei der Erstellung zugewiesen wird.

Hinweise

Der Visual Basic-Compiler verwendet die Dim-Anweisung um den Datentyp der Variablen und andere Informationen zu ermitteln, z. B. welcher Code auf die Variable zugreifen kann. Im folgenden Beispiel wird eine Variable deklariert, die einen Integer-Wert enthalten soll.

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

Verwenden Sie für einen Referenztyp das New-Schlüsselwort, um eine neue Instanz der vom Datentyp angegebenen Klasse oder Struktur zu erstellen. Wenn Sie New angeben, verwenden Sie keinen Initialisiererausdruck. Stellen Sie stattdessen, falls erforderlich, Argumente für den Konstruktor der Klasse bereit, aus der Sie die Variable erstellen.

Dim bottomLabel As New System.Windows.Forms.Label

Sie können eine Variable in einer Prozedur, Block, Klasse, Struktur oder Modul deklarieren. Sie können keine Variable in einer Quelldatei, Namespace, oder Schnittstelle deklarieren. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen (Visual Basic).

Eine auf Modulebene, außerhalb einer Prozedur deklarierte Variable ist eine Membervariable oder ein Feld. Der Gültigkeitsbereich von Membervariablen umfasst ihre Klasse, ihr Struktur oder ihr Modul. Eine auf Prozedurebene deklarierte Variable ist eine lokale Variable. Der Gültigkeitsbereich lokaler Variablen umfasst nur ihre Prozedur oder ihren Block.

Die folgenden Zugriffsmodifizierer werden zum Deklarieren von Variablen außerhalb einer Prozedur verwendet: Public, Protected, Friend, Protected Friend und Private. Weitere Informationen finden Sie unter Zugriffsebenen in Visual Basic.

Das Schlüsselwort Dim ist optional und wird in der Regel weggelassen, wenn Sie einen der folgenden Modifizierer angeben: Public, Protected, Friend, Protected Friend, Private, Shared, Shadows, Static, ReadOnly oder WithEvents.

Public maximumAllowed As Double
Protected Friend currentUserName As String
Private salary As Decimal
Static runningTotal As Integer

Wenn Option Explicit auf On (Standard) festgelegt ist, erfordert der Compiler eine Deklaration für jede verwendete Variable. Weitere Informationen finden Sie unter Option Explicit-Anweisung (Visual Basic).

Festlegen eines Anfangswerts

Sie können einer Variablen einen Wert zuweisen, wenn sie erstellt wird. Verwenden Sie für einen Werttyp einen Initialisierer, um einen der Variablen zuzuweisenden Ausdruck anzugeben. Der Ausdruck muss eine Konstante ergeben, die zur Kompilierzeit berechnet werden kann.

Dim quantity As Integer = 10
Dim message As String = "Just started"

Wenn eine Initialisierung angegeben ist und ein Datentyp in einer As-Klausel nicht angegeben ist, wird der Typrückschluss verwendet, um den Datentyp aus der Initialisierung abzuleiten. Im folgenden Beispiel sind num1 und num2 stark typisiert als ganze Zahlen. In der zweiten Deklaration leitet der Typrückschluss den Datentyp vom Wert 3 ab.

' Use explicit typing.
Dim num1 As Integer = 3

' Use local type inference.
Dim num2 = 3

Der Typrückschluss ist auf der Prozedurebene gültig. Sie gilt nicht außerhalb einer Prozedur in einer Klasse, Struktur, einem Modul oder einer Schnittstelle. Weitere Informationen zum Typrückschluss finden Sie unter Option Infer-Anweisung und Lokaler Typrückschluss (Visual Basic).

Informationen darüber, was passiert, wenn ein Datentyp oder eine Initialisierung nicht angegeben ist, finden Sie unter Typen und Werte von Standarddaten weiter unten in diesem Thema.

Sie können Instanzen von benannten und anonymen Typen mit einem Objektinitialisierer deklarieren. Der folgende Code erstellt eine Instanz einer Student-Klasse und verwendet einen Objektinitialisierer, um Eigenschaften zu initialisieren.

Dim student1 As New Student With {.First = "Michael", 
                                  .Last = "Tucker"}

Weitere Informationen über Objektinitialisierer finden Sie unter Gewusst wie: Deklarieren eines Objekts mithilfe eines Objektinitialisierers (Visual Basic), Objektinitialisierer: Benannte und anonyme Typen (Visual Basic) und Anonyme Typen (Visual Basic).

Deklarieren mehrerer Variablen

Sie können in einer Deklarationsanweisung mehrere Variablen deklarieren, indem Sie die einzelnen Variablennamen für jede Variable gefolgt von Klammern hinter jedem Arraynamen angeben. Mehrere Variablen werden durch Komma voneinander 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 angeben.

Sie können für verschiedene Variablen unterschiedliche Datentypen angeben, indem Sie für jede deklarierte Variable eine eigene As-Klausel verwenden. Jede Variable übernimmt den Datentyp, der in der ersten As-Klausel nach dem jeweiligen variablename-Teil angegeben wird.

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

Arrays

Sie können eine Variable deklarieren, die ein Array enthalten soll, das mehrere Werte enthalten kann. Um anzugeben, dass eine Variable ein Array enthält, fügen Sie direkt nach dem variablename Klammern hinzu. Weitere Informationen zu Arrays finden Sie unter Arrays in Visual Basic.

Sie können die Unter- und Obergrenze jeder Dimension eines Arrays angeben. Hierzu fügen Sie in die Klammern eine boundslist ein. Die boundslist gibt für jede Dimension die Obergrenze und optional die Untergrenze an. Die Untergrenze ist immer 0 (null), unabhängig davon, ob Sie sie angeben. Jeder Index kann zwischen 0 (null) und dem Wert seiner Obergrenze betragen.

Die folgenden beiden Anweisungen sind gleichwertig. Jede Anweisung deklariert ein Array von 21 Integer-Elementen. Beim Zugriff auf das Array kann der Index zwischen 0 und 20 betragen.

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 4 Zeilen (3 + 1) von jeweils 6 Spalten (5 + 1) auf. Beachten Sie, dass die Obergrenze der höchste mögliche Wert für den Feldindex ist und nicht die Länge der Dimension. Die Länge der Dimension ist die Obergrenze plus eins.

Dim matrix2(3, 5) As Double

Ein Array kann zwischen 1 bis 32 Dimensionen aufweisen.

Sie können in einer Arraydeklaration alle Grenzen leer lassen. In diesem Fall verfügt das Array zwar über die Anzahl von angegebenen Dimensionen, es ist jedoch nicht initialisiert. Es hat den Wert Nothing, bis mindestens einige seiner Elemente initialisiert werden. In der Dim-Anweisung müssen entweder Grenzen für alle Dimensionen oder für keine Dimension angegeben werden.

' 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 zwischen den Klammern Kommas einfügen, um die Anzahl der Dimensionen anzugeben.

Dim oneDimension(), twoDimensions(,), threeDimensions(,,) As Byte

Sie können ein Array der Länge 0 deklarieren, indem Sie eine der Dimensionen des Arrays als -1 deklarieren. In einer Variablen mit einem Array der Länge 0 (null) kommt auch der Wert Nothing nicht vor. Leere Arrays werden von bestimmten Common Language Runtime-Funktionen benötigt. Wenn Sie versuchen, auf solch ein Array zuzugreifen, tritt eine Laufzeitausnahme auf. Weitere Informationen finden Sie unter Arrays in Visual Basic.

Sie können die Werte eines Arrays initialisieren, indem Sie ein Arrayliteral verwenden. Dazu umgeben Sie die Initialisierungswerte mit geschweiften Klammern ({}).

Dim longArray() As Long = {0, 1, 2, 3}

Bei mehrdimensionalen Arrays wird die Initialisierung jeder einzelnen Dimension in geschweifte Klammern innerhalb der äußeren Dimension eingeschlossen. Die Elemente werden in zeilengerichteter Reihenfolge angegeben.

Dim twoDimensions(,) As Integer = {{0, 1, 2}, {10, 11, 12}}

Weitere Informationen über Arrayliterale finden Sie unter Arrays in Visual Basic.

Typen und Werte von Standarddaten

Die folgende Tabelle beschreibt die Ergebnisse der verschiedenen Kombinationen der Angabe von Datentyp und Initialisierung in einer Dim-Anweisung.

Datentyp angegeben?

Initialisierung angegeben?

Beispiel

Ergebnis

nein

nein

Dim qty

Wenn Option Strict Off ist (Standardwert), wird die Variable auf Nothing festgelegt.

Wenn Option Strict On ist, tritt ein Kompilierungsfehler auf.

nein

Yes

Dim qty = 5

Wenn Option Infer On ist (Standardwert), verwendet die Variable den Datentyp des Initialisierers. Weitere Informationen finden Sie unter Lokaler Typrückschluss (Visual Basic).

Wenn Option Infer Off ist und Option Strict Off ist, nimmt die Variable den Datentyp von Object.

Wenn Option Infer Off ist und Option Strict On ist, tritt ein Kompilierungsfehler auf.

Yes

nein

Dim qty As Integer

Die Variable wird auf den Standardwert für den Datentyp initialisiert. Siehe die Tabelle weiter unten in diesem Abschnitt.

Yes

Yes

Dim qty As Integer = 5

Wenn der Datentyp der Initialisierung nicht in den angegebenen Datentyp konvertiert werden kann, tritt ein Kompilierungsfehler auf.

Wenn Sie einen Datentyp, aber keinen Initialisierer angeben, initialisiert Visual Basic die Variable mit dem Standardwert des jeweiligen Datentyps. In der folgenden Tabelle werden die Standardinitialisierungswerte aufgeführt.

Datentyp

Standardwert

Alle numerischen Typen (einschließlich Byte und SByte)

0

Char

Binäre 0

Alle Referenztypen (einschließlich Object, String und aller Arrays)

Nothing

Boolean

False

Date

12:00 am 1. Januar des Jahres 1 (01/01/0001 12:00:00 AM)

Jedes Element einer Struktur wird wie eine eigene Variable initialisiert. Wenn Sie die Länge eines Arrays deklarieren, doch seine Elemente nicht initialisieren, wird jedes Element wie eine eigene Variable initialisiert.

Lebensdauer statischer lokaler Variablen

Eine lokale Static-Variable verfügt über eine längere Lebensdauer als die Prozedur, in der sie deklariert ist. Die Grenzen der Lebensdauer einer Variablen sind abhängig davon, wo die Prozedur deklariert wird und ob sie Shared ist.

Prozedurdeklaration

Variable ist initialisiert

Variable beendet vorhandene

In einem Modul

Beim ersten Aufruf der Prozedur

Wenn die Ausführung des Programms beendet wird

In einer Shared-Klasse oder Struktur

Beim ersten Aufruf der Prozedur für eine bestimmte Instanz oder für die Klasse bzw. Struktur selbst

Wenn die Ausführung des Programms beendet wird

In einer Klasse oder Struktur, die nicht Shared ist

Beim ersten Aufruf der Prozedur für eine bestimmte Instanz

Bei der Freigabe der Instanz für die Garbage Collection (GC)

Attribute und Modifizierer

Sie können Attribute nur auf Membervariablen und nicht auf lokale Variablen anwenden. Ein Attribut fügt den Metadaten einer Assembly Informationen hinzu. Dies ist für die temporäre Speicherung, z. B. in lokalen Variablen, nicht sinnvoll.

Auf Modulebene können Sie Membervariablen nicht mit dem Static-Modifizierer deklarieren. Auf Prozedurebene können Sie lokale Variablen nicht mit Shared, Shadows, ReadOnly, WithEvents und nicht mit Zugriffsmodifizierern deklarieren.

Sie können angeben, welcher Code auf eine Variable zugreifen kann, indem Sie einen accessmodifier angeben. Standardmäßig gilt für Klassen- und Modulmembervariablen (außerhalb einer Prozedur) privater Zugriff und für Strukturmembervariablen öffentlicher Zugriff. Sie können ihre Zugriffsebenen mit den Zugriffsmodifizierern anpassen. In einer Prozedur können Sie lokale Variablen nicht mit Zugriffsmodifizierern verwenden.

Sie können WithEvents nur für Membervariablen und nicht für lokale Variablen in einer Prozedur angeben. Wenn Sie WithEvents angeben, muss der Datentyp der Variablen ein bestimmter Klassentyp sein und darf nicht Object sein. Sie können Arrays nicht mit WithEvents deklarieren. Weitere Informationen über Ereignisse finden Sie unter Ereignisse (Visual Basic).

Tipp

Code außerhalb einer Klasse, einer Struktur oder eines Moduls muss den Namen einer Membervariablen mit dem Namen der Klasse, der Struktur bzw. des Moduls qualifizieren. Code außerhalb einer Prozedur oder eines Blocks kann auf keine lokalen Variablen innerhalb dieser Prozedur bzw. dieses Blocks verweisen.

Beispiel

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 variable that refers to a Button object,
' create a Button object, and assign the Button object
' to the variable.
Dim switchButton As New System.Windows.Forms.Button

' 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}

Das folgende Beispiel listet die Primzahlen zwischen 1 und 30 auf. 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

Im folgenden Beispiel wird die Variable speedValue auf Klassenebene deklariert. Das Private-Schlüsselwort wird verwendet, um die Variable zu deklarieren. Auf die Variable kann aus einer beliebigen 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

Aufgaben

Gewusst wie: Deklarieren einer Instanz eines anonymen Typs (Visual Basic)

Gewusst wie: Deklarieren eines Objekts mithilfe eines Objektinitialisierers (Visual Basic)

Referenz

Const-Anweisung (Visual Basic)

ReDim-Anweisung (Visual Basic)

Option Explicit-Anweisung (Visual Basic)

Option Infer-Anweisung

Option Strict-Anweisung

Seite "Kompilieren", Projekt-Designer (Visual Basic)

Konzepte

Variablendeklaration in Visual Basic

Arrays in Visual Basic

Objektinitialisierer: Benannte und anonyme Typen (Visual Basic)

Anonyme Typen (Visual Basic)

Objektinitialisierer: Benannte und anonyme Typen (Visual Basic)

Lokaler Typrückschluss (Visual Basic)

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

Januar 2011

Die Hinweise neu organisiert, Beispiele hinzugefügt und andere Änderungen vorgenommen.

Informationsergänzung.