Istruzione Dim (Visual Basic)

Dichiara e alloca spazio di archiviazione per una o più variabili.

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

Parti

Termine

Definizione

attributelist

Opzionale.Vedere Elenco degli attributi.

accessmodifier

Opzionale.ad esempio uno dei seguenti:

Vedere Livelli di accesso in Visual Basic.

Shared

Opzionale.Vedere Shared.

Shadows

Opzionale.Vedere Shadows.

Static

Opzionale.Per informazioni, vedere Static.

ReadOnly

Opzionale.Per informazioni, vedere ReadOnly.

WithEvents

Opzionale.Specifica che si tratta di variabili oggetto che fanno riferimento a istanze di una classe che può generare eventi.Per informazioni, vedere WithEvents.

variablelist

Necessario.Elenco delle variabili dichiarate in questa istruzione.

variable [ , variable ... ]

Ogni variable presenta la sintassi e le parti seguenti:

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

ParteDescrizione
variablename Necessario.Nome della variabile.Vedere Nomi di elementi dichiarati (Visual Basic).
boundslist Opzionale.Elenco dei limiti di ciascuna dimensione di una variabile di matrice.
New Opzionale.Crea una nuova istanza della classe durante l'esecuzione dell'istruzione Dim.
datatype Opzionale.Consente di indicare il tipo di dati della variabile.
With Opzionale.Introduce l'elenco dell'inizializzatore di oggetto.
propertyname Opzionale.Nome di una proprietà nella classe di cui si sta creando un'istanza.
propinitializer Obbligatorio dopo propertyname =.Espressione che viene valutata e assegnata al nome di proprietà.
initializer Facoltativa se New non è specificato.Espressione che viene valutata e assegnata alla variabile quando viene creata.

Note

L'istruzione Dim viene utilizzata dal compilatore Visual Basic per determinare il tipo di dati della variabile e altre informazioni, ad esempio il codice tramite cui è possibile accedere alla variabile.Nell'esempio seguente viene dichiarata una variabile che conterrà un valore Integer.

Dim numberOfStudents As Integer

È possibile specificare qualsiasi tipo di dati o il nome di un'enumerazione, struttura, classe o interfaccia.

Dim finished As Boolean
Dim monitorBox As System.Windows.Forms.Form

Per un tipo di riferimento, viene utilizzata la parola chiave New per creare una nuova istanza della classe o della struttura specificata dal tipo di dati.Se si utilizza New, non viene utilizzata un'espressione dell'inizializzatore.Se necessario, fornire invece gli argomenti al costruttore della classe da cui viene creata la variabile.

Dim bottomLabel As New System.Windows.Forms.Label

È possibile dichiarare una variabile in una routine, in un blocco, in una classe, in una struttura o in un modulo.Non è possibile dichiarare una variabile in un file di origine, in uno spazio dei nomi o in un'interfaccia.Per ulteriori informazioni, vedere Contesti delle dichiarazioni e livelli di accesso predefiniti (Visual Basic).

Una variabile dichiarata a livello di modulo, esterna a qualsiasi routine, è una variabile membro o campo.Le variabili membro appartengono a un ambito all'interno della rispettiva classe, struttura o modulo.Una variabile dichiarata a livello di routine è una variabile locale.Le variabili locali appartengono a un ambito solo se incluse nella relativa routine o blocco.

I seguenti modificatori di accesso sono utilizzati per dichiarare le variabili all'esterno di una routine: Public, Protected, Friend, Protected Friend e Private.Per ulteriori informazioni, vedere Livelli di accesso in Visual Basic.

La parola chiave Dim è facoltativa e in genere viene omessa se si specifica uno dei seguenti modificatori: Public, Protected, Friend, Protected Friend, Private, Shared, Shadows, Static, ReadOnly oppure WithEvents.

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

Se Option Explicit è attivato (impostazione predefinita), il compilatore richiede una dichiarazione per ogni variabile utilizzati.Per ulteriori informazioni, vedere Istruzione Option Explicit (Visual Basic).

Specifica di un valore iniziale

È possibile assegnare un valore a una variabile nel momento in cui viene creata.Per un tipo di valore, viene utilizzato un inizializzatore per fornire un'espressione da assegnare alla variabile.Questa espressione deve restituire una costante che può essere calcolata in fase di compilazione.

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

Se si specifica un inizializzatore ma non si specifica un tipo di dati in una clausola As, per dedurre il tipo di dati dall'inizializzatore si utilizza l'inferenza del tipo.Nell'esempio seguente num1 e num2 sono fortemente tipizzati come integer.Nella seconda dichiarazione, tramite l'inferenza del tipo, il tipo viene dedotto dal valore 3.

' Use explicit typing.
Dim num1 As Integer = 3

' Use local type inference.
Dim num2 = 3

L'inferenza del tipo di variabile locale si applica a livello di routine.Non si applica all'esterno di una routine in una classe, struttura, modulo o interfaccia.Per ulteriori informazioni sull'inferenza dei tipi, vedere Istruzione Option Infer e Inferenza del tipo di variabile locale (Visual Basic).

Per informazioni sulle conseguenze della mancata definizione di un tipo di dati o di un inizializzatore specifico, vedere Tipi di dati e valori predefiniti più avanti in questo argomento.

È possibile utilizzare un inizializzatore di oggetto per dichiarare istanze di tipi denominati e anonimi.Tramite il codice riportato di seguito è possibile creare un'istanza di una classe Student e utilizzare un inizializzatore di oggetti per inizializzare le proprietà.

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

Per ulteriori informazioni sugli inizializzatori di oggetti, vedere Procedura: dichiarare un oggetto utilizzando un inizializzatore di oggetto (Visual Basic), Inizializzatori di oggetto: tipi denominati e tipi anonimi (Visual Basic) e Tipi anonimi (Visual Basic).

Dichiarazione di più variabili

È possibile dichiarare più variabili in una sola istruzione per la dichiarazione specificando il nome variabile per ogni variabile e aggiungendo delle parentesi subito dopo ciascun nome di matrice.Le variabili sono separate da una virgola.

Dim lastTime, nextTime, allTimes() As Date

Se si dichiarano più variabili con una sola clausola As, non è possibile specificare un inizializzatore per tale gruppo di variabili.

È possibile specificare tipi di dati diversi per variabili differenti utilizzando una clausola As distinta per ogni variabile dichiarata.Ogni variabile accetta il tipo di dati specificato nella prima clausola As dopo la relativa parte variablename.

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

Matrici

È possibile dichiarare una variabile affinché contenga una matrice, che a sua volta può includere più valori.Per specificare che in una variabile è contenuta una matrice, aggiungere delle parentesi subito dopo variablename.Per ulteriori informazioni sulle matrici, vedere Matrici in Visual Basic.

È possibile specificare il limite inferiore e superiore per ciascuna dimensione di una matrice.A tale scopo, racchiudere boundslist tra parentesi.boundslist specifica il limite superiore e facoltativamente il limite inferiore di ogni dimensione.Il limite inferiore corrisponde sempre a zero, indipendentemente dal fatto che venga specificato o meno.Il valore di ogni indice può variare da zero al relativo valore limite superiore.

Le due istruzioni seguenti sono equivalenti.Ogni istruzione dichiara una matrice di 21 elementi Integer.Quando si accede alla matrice, il valore dell'indice può variare da 0 a 20.

Dim totals(20) As Integer
Dim totals(0 To 20) As Integer

L'istruzione seguente dichiara una matrice bidimensionale di tipo Double.La matrice dispone di 4 righe (3 + 1) di 6 colonne (5 + 1).Si noti che il limite superiore rappresenta il valore massimo consentito per tale indice, non la lunghezza della dimensione.La lunghezza della dimensione è il limite superiore più uno.

Dim matrix2(3, 5) As Double

Una matrice può avere da una a 32 dimensioni.

In una dichiarazione di matrice è possibile lasciare tutti i limiti vuoti.Se si procede in questo modo, la matrice ha il numero di dimensioni specificato, ma non viene inizializzata.Il valore della matrice sarà Nothing fino a quando non viene inizializzato almeno qualcuno dei relativi elementi.Tramite l'istruzione Dim devono essere specificati i limiti di tutte le dimensioni oppure di nessuna.

' Declare an array with blank array bounds.
Dim messages() As String
' Initialize the array.
ReDim messages(4)

Se una matrice presenta più dimensioni, è necessario inserire una virgola tra le parentesi per indicare il numero di dimensioni.

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

È possibile dichiarare una matrice di lunghezza zero dichiarando una delle dimensioni della matrice in modo che corrisponda a -1.Il valore di una variabile con una matrice di lunghezza zero non è Nothing.Le matrici di lunghezza zero sono richieste da determinate funzioni di Common Language Runtime.Se si tenta di accedere a una matrice di questo tipo, si verifica un'eccezione in fase di esecuzione.Per ulteriori informazioni, vedere Matrici in Visual Basic.

È possibile inizializzare i valori di una matrice utilizzando un valore letterale della matrice.A tale scopo, racchiudere i valori di inizializzazione in parentesi ({}).

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

Nelle matrici multidimensionali, l'inizializzazione di ciascuna dimensione separata è racchiusa tra parentesi graffe all'interno della dimensione esternae gli elementi vengono specificati per lunghezza di riga.

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

Per ulteriori informazioni sui valori letterali della matrice, vedere Matrici in Visual Basic.

Tipi di dati e valori predefiniti

Nella tabella seguente vengono descritti i risultati di varie combinazioni della specifica del tipo di dati e dell'inizializzatore in un'istruzione Dim.

Tipo di dati specificato?

Inizializzatore specificato?

Esempio

Risultato

No

No

Dim qty

Se Option Strict è disattivato (impostazione predefinita), la variabile è impostata su Nothing.

Se Option Strict è abilitato, si verifica un errore in fase di compilazione.

No

Dim qty = 5

Se Option Infer è su (impostazione predefinita), la variabile assume il tipo di dati dell'inizializzatore.Vedere Inferenza del tipo di variabile locale (Visual Basic).

Se le istruzioni Option Infer e Option Strict sono disabilitate, il tipo di dati accettato dalla variabile è Object.

Se Option Infer è disabilitato e Option Strict è abilitato, si verifica un errore in fase di compilazione.

No

Dim qty As Integer

La variabile viene inizializzata sul valore predefinito per il tipo di dati.Vedere la tabella più avanti in questa sezione.

Dim qty As Integer = 5

Se il tipo di dati dell'inizializzatore non è convertibile nel tipo di dati specificato, si verifica un errore in fase di compilazione.

Se si specifica un tipo di dati ma non viene specificato un inizializzatore, in Visual Basic la variabile viene inizializzata sul valore predefinito per il relativo tipo di dati.Nella tabella seguente sono riportati i valori di inizializzazione predefiniti.

Tipo di dati

Valore predefinito

Tutti i tipi numerici (inclusi Byte e SByte)

0

Char

0 binario

Tutti i tipi di riferimenti (compresi Object, String e tutte le matrici).

Nothing

Boolean

False

Date

00:00 dell'1 gennaio dell'anno 1 (01/01/0001 00:00:00)

Ogni elemento di una struttura verrà inizializzato come se fosse una variabile distinta.Se si dichiara la lunghezza di una matrice senza inizializzarne gli elementi, ciascun elemento verrà inizializzato come se si trattasse di una variabile separata.

Durata della variabile locale Static

Una variabile locale Static presenta una durata maggiore rispetto a quella della routine in cui viene dichiarata.La durata della variabile dipende dalla posizione in cui viene dichiarata la routine e dal fatto che quest'ultima sia o meno Shared.

Dichiarazione di routine

La variabile viene inizializzata

La variabile non esiste più

In un modulo

La prima volta che la routine viene chiamata

Quando viene terminata l'esecuzione

In una classe o struttura, la routine viene Shared

La prima volta che la routine viene chiamata su un'istanza specifica o sulla classe o struttura stessa

Quando viene terminata l'esecuzione

In una classe o struttura, la routine non è Shared

La prima volta che la routine viene chiamata su un'istanza specifica

Quando l'istanza viene rilasciata per la Garbage Collection

Attributi e modificatori

È possibile applicare attributi solo alle variabili membro e non alle variabili locali.Un attributo fornisce informazioni ai metadati dell'assembly, non necessarie agli archivi temporanei quali le variabili locali.

A livello di modulo, non è possibile utilizzare il modificatore Static per dichiarare le variabili membro.A livello di routine, non è possibile utilizzare Shared, Shadows, ReadOnly, WithEvents o altri modificatori di accesso per dichiarare le variabili locali.

È possibile specificare il codice tramite il quale accedere a una variabile fornendo un accessmodifier.Le variabili membro di una classe o di un modulo all'esterno di una routine per impostazione predefinita dispongono di un accesso privato a differenza delle variabili membro di una struttura che dispongono invece di un accesso pubblico.È possibile modificarne i livelli di accesso mediante gli appositi modificatori.Non è possibile utilizzare i modificatori di accesso sulle variabili locali all'interno di una routine.

È possibile specificareWithEvents solo con le variabili membro e non con le variabili locali incluse in una routine.Se si specifica WithEvents, il tipo di dati della variabile deve corrispondere a un tipo di classe specifico, non al tipo Object.Non è possibile dichiarare una matrice con variabili WithEvents.Per ulteriori informazioni sugli eventi, vedere Eventi (Visual Basic).

[!NOTA]

Il codice al di fuori di una classe, di una struttura o di un modulo deve qualificare il nome di una variabile membro con il nome di tale classe, struttura o modulo.Tuttavia il codice all'esterno di una routine o di un blocco non può fare riferimento a variabili locali incluse in tale routine o blocco.

Rilascio delle risorse gestite

Il Garbage Collector di .NET Framework dispone di risorse gestite senza alcuna codifica supplementare aggiuntive.Tuttavia, è possibile forzare l'eliminazione di una risorsa gestita anziché attendere il Garbage Collector.

Se contiene le classi su una risorsa particolare importanza e insufficiente (ad esempio una connessione di database o un handle di file), non è opportuno attendere l'operazione di Garbage Collection successiva per eliminare l'istanza della classe che non viene più utilizzata.La classe può implementare l'interfaccia IDisposable per fornire un modo per rilasciare risorse prima di un'operazione di Garbage Collection.Classe che implementa l'interfaccia che espone un metodo Dispose che può essere chiamato per forzare le risorse importanti da rilasciare immediatamente.

L'istruzione Using automatizzare il processo di acquisto di risorsa, di eseguire un set di istruzioni quindi disporre della risorsa.Tuttavia, la risorsa deve implementare l'interfaccia IDisposable.Per ulteriori informazioni, vedere Istruzione Using (Visual Basic).

Esempio

Nell'esempio seguente vengono dichiarate delle variabili mediante l'istruzione Dim con diverse opzioni.

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

Nell'esempio seguente vengono elencati i numeri primi tra 1 e 30.L'ambito delle variabili locali viene descritto nei commenti del codice.

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

Nell'esempio seguente, la variabile speedValue viene dichiarata a livello di classe.La parola chiave Private viene utilizzata per dichiarare la variabile.L'accesso alla variabile può essere eseguito da qualsiasi routine nella classe Car.

' 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

Vedere anche

Attività

Procedura: dichiarare un oggetto utilizzando un inizializzatore di oggetto (Visual Basic)

Riferimenti

Istruzione Const (Visual Basic)

Istruzione ReDim (Visual Basic)

Istruzione Option Explicit (Visual Basic)

Istruzione Option Infer

Istruzione Option Strict

Pagina Compilazione, Progettazione progetti (Visual Basic)

Concetti

Dichiarazione di variabili in Visual Basic

Inizializzatori di oggetto: tipi denominati e tipi anonimi (Visual Basic)

Tipi anonimi (Visual Basic)

Inizializzatori di oggetto: tipi denominati e tipi anonimi (Visual Basic)

Inferenza del tipo di variabile locale (Visual Basic)

Altre risorse

Matrici in Visual Basic