Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'ambito di un elemento dichiarato è il set di tutto il codice che può farvi riferimento senza qualificarne il nome o renderlo disponibile tramite un'istruzione Imports (spazio dei nomi.NET e tipo). Un elemento può avere un ambito a uno dei livelli seguenti:
| Livello | Descrizione |
|---|---|
| Ambito di blocco | Disponibile solo all'interno del blocco di codice in cui è dichiarato |
| Ambito della procedura | Disponibile per tutto il codice all'interno della procedura in cui è dichiarata |
| Ambito del modulo | Disponibile per tutto il codice all'interno del modulo, della classe o della struttura in cui è dichiarato |
| Ambito del namespace | Disponibile per tutto il codice nello spazio dei nomi in cui è dichiarato |
Questi livelli di avanzamento dell'ambito dal più stretto (blocco) al più ampio (spazio dei nomi), dove l'ambito più stretto indica il set di codice più piccolo che può fare riferimento all'elemento senza qualifica. Per altre informazioni, vedere "Livelli di ambito" in questa pagina.
Specificare l'ambito e definire le variabili
Specificare l'ambito di un elemento quando lo dichiari. L'ambito può dipendere dai fattori seguenti:
Area (blocco, routine, modulo, classe o struttura) in cui si dichiara l'elemento
Spazio dei nomi contenente la dichiarazione dell'elemento
Livello di accesso dichiarato per l'elemento
Prestare attenzione quando si definiscono variabili con lo stesso nome ma un ambito diverso, perché ciò può causare risultati imprevisti. Per altre informazioni, vedere Riferimenti agli elementi dichiarati.
Livelli di ambito
Un elemento di programmazione è disponibile in tutta l'area in cui la dichiari. Tutto il codice nella stessa area può fare riferimento all'elemento senza qualificarne il nome.
Ambito di blocco
Un blocco è un set di istruzioni racchiuse all'interno di istruzioni di dichiarazione di avvio e terminazione, ad esempio le seguenti:
DoeLoopFor[Each] eNextIfeEnd IfSelecteEnd SelectSyncLockeEnd SyncLockTryeEnd TryWhileeEnd WhileWitheEnd With
Se si dichiara una variabile all'interno di un blocco, è possibile usarla solo all'interno di tale blocco. Nell'esempio seguente l'ambito della variabile cube integer è il blocco tra If e End Ife e non è più possibile fare riferimento a cube quando l'esecuzione supera il blocco.
If n < 1291 Then
Dim cube As Integer
cube = n ^ 3
End If
Annotazioni
Anche se l'ambito di una variabile è limitato a un blocco, la sua durata è comunque quella dell'intera procedura. Se si immette il blocco più volte durante la procedura, ogni variabile di blocco mantiene il valore precedente. Per evitare risultati imprevisti in questo caso, è consigliabile inizializzare le variabili di blocco all'inizio del blocco.
Ambito procedura
Un elemento dichiarato all'interno di una routine non è disponibile all'esterno di tale procedura. Solo la routine che contiene la dichiarazione può usarla. Le variabili a questo livello sono note anche come variabili locali. Le dichiari tramite l'istruzione Dim, sia con che senza la parola chiave Static.
L'ambito delle procedure e dei blocchi sono strettamente correlati. Se si dichiara una variabile all'interno di una routine ma all'esterno di qualsiasi blocco all'interno di tale routine, è possibile considerare la variabile come l'ambito del blocco, in cui il blocco è l'intera procedura.
Annotazioni
Tutti gli elementi locali, anche se sono Static variabili, sono privati della procedura in cui vengono visualizzati. Non è possibile dichiarare alcun elemento utilizzando la parola chiave Public all'interno di una routine.
Ambito del modulo
Per praticità, il livello di modulo a termine singolo si applica allo stesso modo a moduli, classi e strutture. È possibile dichiarare elementi a questo livello inserendo l'istruzione di dichiarazione all'esterno di qualsiasi routine o blocco, ma all'interno del modulo, della classe o della struttura.
Quando si crea una dichiarazione a livello di modulo, il livello di accesso scelto determina l'ambito. Lo spazio dei nomi che contiene il modulo, la classe o la struttura influisce anche sull'ambito.
Gli elementi per i quali si dichiara il livello di accesso privato sono disponibili per ogni routine di tale modulo, ma non per qualsiasi codice in un modulo diverso. L'istruzione Dim a livello di modulo assume Private per impostazione predefinita se non si utilizzano parole chiave di livello di accesso. Tuttavia, è possibile rendere più ovvio l'ambito e il livello di accesso usando la Private parola chiave nell'istruzione Dim .
Nell'esempio seguente tutte le procedure definite nel modulo possono fare riferimento alla variabile strMsgstringa . Quando viene chiamata la seconda routine, viene visualizzato il contenuto della variabile strMsg stringa in una finestra di dialogo.
' Put the following declaration at module level (not in any procedure).
Private strMsg As String
' Put the following Sub procedure in the same module.
Sub initializePrivateVariable()
strMsg = "This variable cannot be used outside this module."
End Sub
' Put the following Sub procedure in the same module.
Sub usePrivateVariable()
MsgBox(strMsg)
End Sub
Ambito dello spazio dei nomi
Se si dichiara un elemento a livello di modulo usando la parola chiave Friend o Public , diventa disponibile per tutte le procedure nello spazio dei nomi in cui viene dichiarato l'elemento. Con la modifica seguente all'esempio precedente, la variabile stringa strMsg può essere richiamata dal codice in qualsiasi punto dello spazio dei nomi della relativa dichiarazione.
' Include this declaration at module level (not inside any procedure).
Public strMsg As String
L'ambito dello spazio dei nomi include spazi dei nomi annidati. Un elemento disponibile all'interno di uno spazio dei nomi è disponibile anche all'interno di qualsiasi spazio dei nomi annidato all'interno di tale spazio dei nomi.
Se il progetto non contiene istruzioni dello spazio dei nomi, tutti gli elementi del progetto si trovano nello stesso spazio dei nomi. In questo caso, l'ambito dello spazio dei nomi può essere considerato come ambito del progetto.
Public gli elementi di un modulo, una classe o una struttura sono disponibili anche per qualsiasi progetto che faccia riferimento al loro progetto.
Scelta dell'ambito
Quando si dichiara una variabile, è necessario tenere presenti i punti seguenti quando si sceglie il relativo ambito.
Vantaggi delle variabili locali
Le variabili locali sono una buona scelta per qualsiasi tipo di calcolo temporaneo, per i motivi seguenti:
Evitare conflitti di nomi. I nomi delle variabili locali non sono soggetti a conflitti. Ad esempio, è possibile creare diverse procedure contenenti una variabile denominata
intTemp. Purché ogniintTempoggetto venga dichiarato come variabile locale, ogni routine riconosce solo la propria versione diintTemp. Qualsiasi routine può modificare il valore nel relativo localeintTempsenza influire sulleintTempvariabili in altre procedure.Utilizzo della memoria. Le variabili locali utilizzano memoria solo durante l'esecuzione della routine. La memoria viene rilasciata quando la routine torna al codice chiamante. Al contrario, le variabili condivise e statiche utilizzano risorse di memoria fino a quando l'applicazione non viene arrestata , quindi usarle solo quando necessario. Le variabili di istanza usano memoria mentre l'istanza continua a esistere, rendendole meno efficienti delle variabili locali, ma potenzialmente più efficienti di
SharedoStaticvariabili.
Riduzione dell'ambito
In generale, quando si dichiara una variabile o una costante, è consigliabile fare in modo che l'ambito sia il più piccolo possibile (l'ambito del blocco è il più piccolo). In questo modo è possibile risparmiare memoria e ridurre al minimo le probabilità che il codice faccia erroneamente riferimento alla variabile errata. Analogamente, è necessario dichiarare una variabile come Statica solo quando è necessario conservarne il valore tra le chiamate di routine.