Istruzione Dim (Visual Basic)
Consente di dichiarare e allocare lo spazio di archiviazione per una o più variabili.
[ <attributelist> ] [ accessmodifier ] [[ Shared ] [ Shadows ] | [ Static ]] [ ReadOnly ]
Dim [ WithEvents ] variablelist
Parti
Argomento |
Definizione |
attributelist |
Facoltativo. Vedere Elenco degli attributi. |
accessmodifier |
Facoltativo. ad esempio uno dei seguenti: |
Shared |
Facoltativo. Vedere Shared. |
Shadows |
Facoltativo. 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 |
Obbligatoria. 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 ]
ParteOggetto di descrizione
variablename Obbligatoria.Nome della variabile.Vedere Nomi di elementi dichiarati (Visual Basic).
boundslist Facoltativo.Elenco dei limiti di ciascuna dimensione di una variabile di matrice.
New Facoltativo.Crea una nuova istanza della classe durante l'esecuzione dell'istruzione Dim.
datatype Facoltativo.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
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 è impostato su On (impostazione predefinita), il compilatore richiederà una dichiarazione per ciascuna variabile utilizzata. 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 esterna e 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 è Off (impostazione predefinita), la variabile è impostata su Nothing. Se Option Strict è On, si verifica un errore in fase di compilazione. |
No |
Sì |
Dim qty = 5 |
Se Option Infer è On (impostazione predefinita), alla variabile viene assegnato il tipo di dati dell'inizializzatore. Vedere Inferenza del tipo di variabile locale (Visual Basic). Se Option Infer è Off e Option Strict è Off, il tipo di dati accettato dalla variabile è Object. Se Option Infer è Off e Option Strict è On, si verifica un errore in fase di compilazione. |
Sì |
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. |
Sì |
Sì |
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 in una 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 una struttura 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.
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'istanza di un tipo anonimo (Visual Basic)
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)
Pagina Compilazione, Progettazione progetti (Visual Basic)
Concetti
Dichiarazione di variabili in Visual Basic
Inizializzatori di oggetto: tipi denominati e tipi anonimi (Visual Basic)
Inizializzatori di oggetto: tipi denominati e tipi anonimi (Visual Basic)
Inferenza del tipo di variabile locale (Visual Basic)
Cronologia delle modifiche
Data |
Cronologia |
Motivo |
Gennaio 2011 |
Le note sono state riorganizzate, sono stati aggiunti degli esempi e sono state apportate altre modifiche. |
Miglioramento delle informazioni. |