Dim-Anweisung (Visual Basic)

Aktualisiert: November 2007

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

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

Bestandteile

  • attributelist
    Optional. Siehe Attributliste.

  • accessmodifier
    Optional. Einer der folgenden Werte ist möglich:

    Siehe 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 verfügt über folgende Syntax und folgende Bestandteile:

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

    Bestandteil

    Beschreibung

    variablename

    Erforderlich. Name der Variablen. Siehe Namen deklarierter Elemente.

    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

    Erforderlich, wenn Option Strict den Wert On aufweist. 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

Deklarieren Sie jede Variable, die Sie im Programm verwenden, um für den Visual Basic-Compiler den Datentyp der Variablen und weitere Informationen, z. B. welcher Code auf die Variable zugreifen kann, anzugeben. Im folgenden Beispiel wird eine Variable deklariert, die einen Integer-Wert enthalten soll.

Dim numberOfStudents As Integer

Dim kann nur auf Modul- oder Prozedurebene verwendet werden. Dies bedeutet, dass der Deklarationskontext für eine Variable eine Klasse, eine Struktur, ein Modul, eine Prozedur oder ein Block sein muss und keine Quelldatei, kein Namespace und keine Schnittstelle sein kann. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen.

Wenn Option Explicit auf On (Standard) festgelegt ist, erfordert der Compiler eine Deklaration für jede verwendete Variable. Wenn Sie Option Explicit Off festlegen, ist der Standardwert jeder nicht deklarierten Variablen der Object-Datentyp. Das entspricht möglicherweise nicht Ihrer Absicht.

In der Dim-Anweisung können Sie den Datentyp jeder Variablen angeben. Sie können außerdem einen Anfangswert angeben. Andernfalls verwendet Visual Basic Standardeinstellungen. Weitere Informationen finden Sie auf dieser Hilfeseite in "Ausführliche Informationen" unter "Datentypregeln" und "Standardwerte". Im folgenden Beispiel wird eine String-Variable deklariert und initialisiert.

Dim summary As String = "Summary of results" 

Sie können angeben, welcher Code auf eine Variable zugreifen kann, indem Sie in der Dim-Anweisung einen accessmodifier angeben. Weitere Informationen finden Sie auf dieser Hilfeseite in "Ausführliche Informationen" unter "Modifizierer" und "Zugriffsebene".

Sie können eine Variable deklarieren, die ein Array enthalten soll, das mehrere Werte enthalten kann. Weitere Informationen finden Sie auf dieser Hilfeseite in "Ausführliche Informationen" unter "Arrayregeln". Weitere Informationen zu Arrays finden Sie unter Arrays in Visual Basic. Im folgenden Beispiel wird eine Integer-Arrayvariable deklariert.

Dim days() As Integer 

Im Allgemeinen sollten Sie alle Dim-Anweisungen an den Anfang des Codebereichs stellen, in dem Sie die Variablen verwenden. Weitere Informationen finden Sie auf dieser Hilfeseite in "Ausführliche Informationen" unter "Problembehandlung".

Mit Visual Basic 2008 werden Objektinitialisierer, mit denen Instanzen von benannten und anonymen Typen deklariert werden, und lokaler Typrückschluss eingeführt. Weitere Informationen finden Sie unter Anonyme Typen, Objektinitialisierer: Benannte und anonyme Typen und unter Lokaler Typrückschluss.

Ausführliche Informationen

In diesem Abschnitt werden die folgenden Themenbereiche ausführlich behandelt:

  • Deklaration

  • Datentypen

  • Arrays

  • Verhalten

  • Problembehandlung

Deklarationsregeln

  • Deklarationskontext. Eine auf Modulebene deklarierte Variable, die sich außerhalb jeglicher Prozedur befindet, ist eine Membervariable oder ein Feld. Sie ist ein Member der Klasse, der Struktur oder des Moduls, in der bzw. dem sie deklariert ist.

    Eine auf Prozedurebene deklarierte Variable ist eine lokale Variable. Sie ist nur lokal in der Prozedur oder dem Block gültig, in der bzw. dem sie deklariert ist.

  • Attribute. 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.

  • Implizite Verwendung von Dim. Wenn Sie einen der Modifizierer Public, Protected, Friend, Protected Friend, Private, Shared, Shadows, Static, ReadOnly oder WithEvents angeben, können Sie das Dim-Schlüsselwort auch weglassen.

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

    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.

  • WithEvents-Variablen. 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 und Ereignishandler.

  • Mehrere Variablen. Sie können in derselben Deklarationsanweisung mehrere Variablen deklarieren, indem Sie den variablename-Teil für jede Variable vor dem in Klammern eingeschlossenen Arraynamen angeben. Mehrere Variablen werden durch Komma voneinander getrennt.

    Dim lastTime, nextTime, allTimes() As Date
    

Datentypregeln

  • Datentypen. Die Dim-Anweisung kann den Datentyp einer Variablen deklarieren. 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
    
  • Standardtyp. Wenn Sie keinen datatype angeben, übernimmt die Variable automatisch den Datentyp initializer. Wird weder datatype noch initializer angegeben, wird standardmäßig Object-Datentyp als Datentyp verwendet. Wenn Sie sowohl datatype als auch initializer angeben, muss der Datentyp initializer in datatype konvertiert werden können.

  • Andere Typen. Sie können für verschiedene Variablen unterschiedliche Datentypen angeben, indem Sie für jede deklarierte Variable eine eigene As-Klausel verwenden. Stattdessen können Sie auch mit einer gemeinsamen As-Klausel für mehrere Variablen denselben Datentyp deklarieren. 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
    
  • Initialisierung. Die Dim-Anweisung kann den Inhalt von ausgewählten Variablen in der variablelist initialisieren. Für einen Werttyp verwenden Sie initializer, 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"
    

    Für einen Referenztyp verwenden Sie das New-Schlüsselwort, um eine neue Instanz der von datatype angegebenen Klasse oder Struktur zu erstellen. Wenn Sie New angeben, verwenden Sie keinen initializer-Ausdruck. 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
    

    Wenn Sie mehrere Variablen mit derselben As-Klausel deklarieren, können Sie keinen initializer für diese Variablengruppe angeben.

Arrayregeln

  • Arrayvariablen. Um anzugeben, dass eine Variable in variablelist ein Array ist, fügen Sie direkt nach ihrem variablename Klammern an. 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
    

    Ein Array kann zwischen 1 bis 32 Dimensionen aufweisen.

    Weitere Informationen finden Sie unter Arrays in Visual Basic.

  • Arraygrenzen. Sie können die Unter- und Obergrenze jeder Dimension 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.

    Dim matrix2(3, 5) As Double
    

    Beachten Sie, dass die Obergrenze der höchste mögliche Wert für diesen Feldindex und nicht die Länge der Dimension ist. Diese wird durch die Obergrenze plus eins bestimmt.

  • Leere Arraygrenzen. 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. Daher hat es 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.

    Dim messages() As String
    
  • Leere Arrays. Die Obergrenze einer Arraydimension kann mit -1 deklariert werden. Dies bedeutet, dass das Array leer, jedoch nicht Nothing ist, eine Unterscheidung, die bei bestimmten Common Language Runtime-Funktionen wichtig ist. Visual Basic-Code kann auf ein solches Array jedoch nicht zugreifen. Wenn Sie es dennoch versuchen, tritt während der Ausführung ein IndexOutOfRangeException-Fehler auf. Weitere Informationen finden Sie unter Gewusst wie: Erstellen eines Arrays ohne Elemente.

  • Arrayinitialisierung. Sie können die Werte eines Arrays initialisieren, indem Sie die Initialisierungswerte in geschweifte Klammern ({}) einschließen.

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

Verhalten

  • Standardwerte. Wenn Sie keinen initializer für eine Variable 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.

  • **Zugriffsebene.**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.

  • Gültigkeitsbereich. Der Gültigkeitsbereich lokaler Variablen umfasst nur ihre Prozedur oder ihren Block. Der Gültigkeitsbereich von Membervariablen umfasst ihre Klasse, ihr Struktur oder ihr Modul.

  • Qualifizierung. 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.

  • Lebensdauer. 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 wird gelöscht

    In einem Modul

    Beim ersten Aufruf der Prozedur

    Wenn die Ausführung des Programms beendet wird

    In einer Klasse oder Struktur Shared

    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 nicht Shared

    Beim ersten Aufruf der Prozedur für eine bestimmte Instanz

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

Problembehandlung

  • Ausführungsreihenfolge. Die Dim-Anweisung selbst ist keine ausführbare Anweisung. Wenn sie eine oder mehrere Variablen initialisiert, werden die Initialisierungen jedoch als Zuweisungsanweisungen behandelt. Dies bedeutet, dass der Wert einer Variablen die folgenden Schritte durchläuft:

    1. Visual Basic initialisiert beim ersten Auftreten des Codeelements, das die Variable deklariert, die Variable mit dem Standardwert für ihren Datentyp.

    2. Wenn die Ausführung auf die Dim-Anweisung der Variablen trifft, initialisiert sie Visual Basic mit dem in der Dim-Anweisung angegebenen Wert.

    3. Wenn die Ausführung zur Dim-Anweisung der Variablen zurückkehrt, legt sie Visual Basic erneut auf den in der Dim-Anweisung angegebenen Wert fest.

    Daraus ergeben sich die folgenden Konsequenzen, wenn Sie eine Variable mit einer Dim-Anweisung initialisieren:

    • Wenn Sie die Variable vor der Ausführung der Dim-Anweisung verwenden, ist ihr Wert der Standardwert für ihren Datentyp und nicht der in der Dim-Anweisung angegebene Wert.

    • Wenn die Ausführung die Dim-Anweisung niemals erreicht, wird die Variable niemals mit dem in der Dim-Anweisung angegebenen Wert initialisiert.

    • Wenn Sie nach dem Ändern des Werts zur Dim-Anweisung zurückkehren, wird der geänderte Wert durch den in der Dim-Anweisung angegebenen Wert ersetzt.

    Wenn Sie alle Dim-Anweisungen an den Anfang des Codebereichs stellen, in dem sie verwendet werden, z. B. in einem Modul oder einer Prozedur, werden sie vom Code wie beabsichtigt initialisiert.

Beispiel

Im folgenden Beispiel werden Variablen mithilfe der Dim-Anweisung mit verschiedenen Optionen deklariert.

' The following statement declares and initializes a Long variable.
Dim startingAmount As Long = 500
' The following statement declares a variable that refers to a Button 
' object, creates a new Button object, and assigns it to the variable.
Dim switchButton As New System.Windows.Forms.Button
' The following statement declares a variable that can only be 
' accessed by code in the same class, structure, or module.
Private homeTelephone As String = ""
' The following statement declares a local variable that always retains
' its value, even after its procedure returns to the calling code.
Static totalSales As Double
' The following statement declares a variable that refers to an array.
Dim highTemperature(31) As Integer
' The following statement declares and initializes an array variable 
' that holds 4 Boolean check values.
Dim checkValues() As Boolean = {False, False, True, False}

Siehe auch

Aufgaben

Gewusst wie: Deklarieren einer Arrayvariablen

Gewusst wie: Deklarieren einer Arrayvariablen

Gewusst wie: Deklarieren einer Instanz eines anonymen Typs

Gewusst wie: Deklarieren eines Objekts mithilfe eines Objektinitialisierers

Konzepte

Variablendeklaration in Visual Basic

Objektinitialisierer: Benannte und anonyme Typen

Anonyme Typen

Objektinitialisierer: Benannte und anonyme Typen

Lokaler Typrückschluss

Referenz

Const-Anweisung (Visual Basic)

ReDim-Anweisung (Visual Basic)

Option Explicit-Anweisung (Visual Basic)