Istruzione Dim (Visual Basic)

Aggiornamento: novembre 2007

Consente di dichiarare e allocare lo spazio di archiviazione per una o più variabili.

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

Parti

  • attributelist
    Facoltativo. Per informazioni, vedere Elenco degli attributi.

  • accessmodifier
    Facoltativo. Può essere uno dei seguenti:

    Per informazioni, vedere Livelli di accesso in Visual Basic.

  • Shared
    Facoltativo. Per informazioni, vedere Shared.

  • Shadows
    Facoltativo. Per informazioni, vedere Shadows.

  • Static
    Facoltativo. Per informazioni, vedere Static.

  • ReadOnly
    Facoltativo. Per informazioni, vedere ReadOnly.

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

  • variablelist
    Obbligatorio. Elenco delle variabili dichiarate in questa istruzione.

    variable [ , variable ... ]

    Ogni elemento variable è associato alla sintassi e alle parti seguenti:

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

    Parte

    Descrizione

    variablename

    Obbligatoria. Nome della variabile. Per informazioni, vedere Nomi di elementi dichiarati.

    boundslist

    Facoltativa. Elenco dei limiti di ciascuna dimensione di una variabile di matrice.

    New

    Facoltativa. Crea una nuova istanza della classe durante l'esecuzione dell'istruzione Dim.

    datatype

    Obbligatoria se Option Strict è impostato su On. Consente di indicare il tipo di dati della variabile.

    With

    Facoltativo. Introduce l'elenco dell'inizializzatore di oggetto.

    propertyname

    Facoltativo. 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

È necessario dichiarare tutte le variabili utilizzate nel programma per indicare al compilatore di Visual Basic il tipo di dati della variabile e altre informazioni, quali il codice che può accedervi. Nell'esempio seguente viene dichiarata una variabile che conterrà un valore Integer.

Dim numberOfStudents As Integer

È possibile utilizzare la parola chiave Dim solo a livello di modulo o routine. In altri termini, il contesto della dichiarazione per una variabile deve essere una classe, una struttura, un modulo, una routine o un blocco, e non può essere un file di origine, uno spazio dei nomi o un'interfaccia. Per ulteriori informazioni, vedere Contesti delle dichiarazioni e livelli di accesso predefinito.

Se Option Explicit è impostato su On (impostazione predefinita), il compilatore richiederà una dichiarazione per ciascuna variabile utilizzata. Se si disattiva Option Explicit Off, i valori predefiniti di tutte le variabili non dichiarate vengono impostati a Tipo di dati Object, il che potrebbe non corrispondere a quanto desiderato.

È possibile specificare il tipo di dati di ogni variabile nell'istruzione Dim. È anche possibile specificare un valore di iniziale. In caso contrario, verranno utilizzate le impostazioni predefinite. Per ulteriori informazioni, vedere "Regole per tipi di dati" e "Valori predefiniti" nella sezione "Informazioni dettagliate" di questa pagina della Guida. Nell'esempio seguente viene dichiarata e inizializzata una variabile String.

Dim summary As String = "Summary of results" 

Per specificare il codice che può accedere a una variabile, inserire accessmodifier nell'istruzione Dim. Per ulteriori informazioni, vedere "Modificatori" e "Livello di accesso" nella sezione "Informazioni dettagliate" di questa pagina della Guida.

È possibile dichiarare una variabile affinché contenga una matrice, che a sua volta può includere più valori. Per ulteriori informazioni, vedere "Regole per matrici" nella sezione "Informazioni dettagliate" di questa pagina della Guida. Per ulteriori informazioni sulle matrici, vedere Matrici in Visual Basic. Nell'esempio seguente viene dichiarata una variabile di matrice Integer.

Dim days() As Integer 

Generalmente, è consigliabile inserire tutte le istruzioni Dim nella parte iniziale dell'area di codice in cui si utilizzano le variabili. Per ulteriori informazioni, vedere "Risoluzione dei problemi" nella sezione "Informazioni dettagliate" di questa pagina della Guida.

Visual Basic 2008 introduce gli inizializzatori di oggetto, utilizzati per dichiarare istanze di tipi denominati e anonimi, e l'inferenza del tipo di variabile locale. Per ulteriori informazioni, vedere Tipi anonimi, Inizializzatori di oggetto: tipi denominati e tipi anonimi e Inferenza dei tipi locali.

Informazioni dettagliate

In questa sezione sono illustrate in dettaglio le aree seguenti:

  • Dichiarazione

  • Tipi di dati

  • Matrici

  • Comportamento

  • Risoluzione dei problemi

Regole per le dichiarazioni

  • Contesto della dichiarazione. Una variabile dichiarata a livello di modulo, al di fuori di una routine, è una variabile membro o un campo ed è un membro della classe, della struttura, del modulo che la dichiara.

    Una variabile dichiarata a livello di routine è una variabile locale, vale a dire locale per la routine o il blocco che la dichiara.

  • Attributi. È 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.

  • Uso implicito di Dim. Se si specifica uno dei modificatori Public, Protected, Friend, Protected Friend, Private, Shared, Shadows, Static, ReadOnly o WithEvents, è possibile omettere la parola chiave Dim.

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

    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.

  • Variabili WithEvents. È possibile utilizzare le variabili WithEvents solo con le variabili membro e non con le variabili locali incluse in una routine.

    Se si specificano variabili WithEvents, il tipo di dati delle variabili deve corrispondere a un tipo di classe specifico e non al tipo Object. Non è possibile dichiarare una matrice con variabili WithEvents.

    Per ulteriori informazioni sugli eventi, vedere Eventi e gestori eventi.

  • Più variabili. Per dichiarare più variabili nella stessa istruzione di dichiarazione, specificare la parte variablename per ciascuna variabile e aprire e chiudere una parentesi dopo il nome di ogni matrice. Le variabili sono separate da una virgola.

    Dim lastTime, nextTime, allTimes() As Date
    

Regole per tipi di dati

  • Tipi di dati. L'istruzione Dim può dichiarare il tipo di dati di una variabile. È possibile specificare un tipo di dati qualsiasi oppure il nome di un'enumerazione, struttura, classe o interfaccia.

    Dim finished As Boolean
    Dim monitorBox As System.Windows.Forms.Form
    
  • Tipo predefinito. Se non si specifica la parte datatype, verrà accettato il tipo di dati di initializer. Se non vengono specificati né datatype né initializer, verrà utilizzato il tipo di dati predefinito Tipo di dati Object. Se si specificano sia la parte datatype che la parte initializer, il tipo di dati di initializer deve poter essere convertito in datatype.

  • Tipi differenti. È possibile specificare tipi di dati diversi per variabili differenti utilizzando una clausola As distinta per ciascuna variabile che viene dichiarata. In alternativa, è possibile dichiarare più variabili come dello stesso tipo utilizzando una clausola As normale. 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
    
  • Inizializzazione. L'istruzione Dim è in grado di inizializzare il contenuto delle variabili selezionate in variablelist. Per un tipo di valore, è possibile utilizzare initializer 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"
    

    Con un tipo di riferimento, è possibile utilizzare la parola chiave New per creare una nuova istanza della classe o della struttura specificata da datatype. Non è possibile utilizzare l'espressione initializer con New. Se necessario, fornire invece gli argomenti al costruttore della classe da cui viene creata la variabile.

    Dim bottomLabel As New System.Windows.Forms.Label
    

    Se si dichiarano più variabili con la medesima clausola As, non è possibile specificare un valore initializer per tale gruppo di variabili.

Regole per matrici

  • Variabili di matrici. Per specificare che una variabile in variablelist è una matrice, aprire e chiudere una parentesi subito dopo variablename. 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
    

    Una matrice può avere da una a 32 dimensioni.

    Per ulteriori informazioni, vedere Matrici in Visual Basic.

  • Limiti di matrici. È possibile specificare il limite inferiore e superiore per ciascuna dimensione. A questo 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).

    Dim matrix2(3, 5) As Double
    

    Si noti che il limite superiore rappresenta il valore massimo consentito per tale indice e non la lunghezza della dimensione, la quale corrisponde al valore del limite superiore più uno.

  • Limiti di matrici vuoti. 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. Pertanto, ha un valore Nothing fino a quando non si inizializza almeno qualcuno degli elementi. L'istruzione Dim deve specificare i limiti di tutti le dimensioni oppure di nessuna.

    Dim messages() As String
    
  • Matrici vuote. È possibile utilizzare -1 per dichiarare il limite superiore di una dimensione di matrice. Tale valore consente di indicare che la matrice è vuota ma non è Nothing, una distinzione richiesta da alcune funzioni di Common Language Runtime. L'accesso a tale matrice tuttavia non può essere effettuato mediante il codice Visual Basic. Se si tenta di accedere alla matrice, durante l'esecuzione verrà generato un errore IndexOutOfRangeException. Per ulteriori informazioni, vedere Procedura: creare una matrice senza elementi.

  • Inizializzazione di una matrice. È possibile inizializzare i valori di una matrice racchiudendo i valori di inizializzazione tra parentesi graffe ({}).

    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 esterna e gli elementi vengono specificati per lunghezza di riga.

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

Comportamento

  • Valori predefiniti. Se per una variabile non è specificato alcun valore initializer, verrà utilizzato il 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.

  • Livello di accesso. 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 i modificatori di accesso. Non è possibile utilizzare i modificatori di accesso sulle variabili locali all'interno di una routine.

  • Ambito. Le variabili locali appartengono a un ambito solo se incluse nella relativa routine o blocco. Le variabili membro appartengono a un ambito all'interno della rispettiva classe, struttura o modulo.

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

  • Durata. 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 cessa di esistere

    In un modulo

    La prima volta che la routine viene chiamata

    Quando viene terminata l'esecuzione

    In una classe o struttura, 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, non Shared

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

    Quando l'istanza viene rilasciata per la Garbage Collection

Risoluzione dei problemi

  • Ordine di esecuzione. L'istruzione Dim non è di per sé un'istruzione eseguibile. Tuttavia, se inizializza una o più variabili, tali inizializzazioni vengono considerate come istruzioni di assegnazione. Pertanto, il valore di una variabile subisce le seguenti operazioni:

    1. La prima voce nell'elemento del codice che dichiara la variabile viene inizializzata sul valore predefinito del relativo tipo di dati.

    2. Durante l'esecuzione, una volta raggiunta l'istruzione Dim della variabile, questa viene inizializzata sul valore fornito nell'istruzione Dim.

    3. Ogni volta che nel corso dell'esecuzione viene raggiunta l'istruzione Dim della variabile, questa viene di nuovo impostata sul valore fornito nell'istruzione Dim.

    L'utilizzo di un'istruzione Dim per inizializzare una variabile ha comunque delle implicazioni:

    • Se si utilizza la variabile prima di eseguire l'istruzione Dim, il valore corrisponderà a quello predefinito per il relativo tipo di dati e non a quello fornito nell'istruzione Dim.

    • Se durante l'esecuzione non viene mai raggiunta l'istruzione Dim, la variabile non verrà mai inizializzata sul valore fornito nell'istruzione Dim.

    • Se un valore viene modificato e in seguito viene raggiunta l'istruzione Dim, il valore modificato verrà sostituito da quello specificato nell'istruzione Dim.

    Se si inseriscono tutte le istruzioni Dim all'inizio dell'area di codice alla quale appartengono, ad esempio in un modulo o in una routine, queste verranno inizializzate nel modo desiderato.

Esempio

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

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

Vedere anche

Attività

Procedura: dichiarare una variabile di matrice

Procedura: dichiarare una variabile di matrice

Procedura: dichiarare un'istanza di un tipo anonimo

Procedura: dichiarare un oggetto utilizzando un inizializzatore di oggetto

Concetti

Dichiarazione di variabili in Visual Basic

Inizializzatori di oggetto: tipi denominati e tipi anonimi

Tipi anonimi

Inizializzatori di oggetto: tipi denominati e tipi anonimi

Inferenza dei tipi locali

Riferimenti

Istruzione Const (Visual Basic)

Istruzione ReDim (Visual Basic)

Istruzione Option Explicit (Visual Basic)