In Visual Basic un modulo (Module) consente di dichiarare variabili e procedure disponibili per l'intero progetto (con i corretti modificatori di accesso). Le variabili dichiarate all'interno del modulo al di fuori delle procedure diventano i suoi campi: la loro visibilità dipende dal modificatore (Private/Friend/Public) e la loro durata è per tutto il tempo di vita dell'applicazione.
Caratteristiche chiave delle variabili di modulo:
A differenza delle variabili globali (ad esempio in altri linguaggi o nel vecchio VB6), le variabili di modulo non sono accessibili al di fuori dell'assembly, a meno che non siano esplicitamente dichiarate come Public.
Esempio:
Module Globals Public Counter As Integer Sub Increment() Counter += 1 End Sub End Module ' Accesso a Counter da qualsiasi punto dello stesso progetto
Domanda: Quale accesso avrà la variabile di modulo se dichiarata con il modificatore Private? Sarà accessibile da altri moduli dello stesso progetto?
Risposta: No, la variabile con il modificatore Private è accessibile solo all'interno di questo modulo: non può essere referenziata da altri moduli o classi.
Module Data Private x As Integer End Module ' Il modulo Other non vedrà x
Storia
Durante lo sviluppo di un servizio di calcolo, tutti i valori dei risultati intermedi venivano salvati in variabili di modulo. Uno degli sviluppatori presumeva che i dati "si resettassero" tra le chiamate, ma lo stato rimaneva (Ambito dell'Applicazione). Questo ha portato a errori durante l'uso parallelo del servizio da parte di più utenti. Soluzione: usare variabili locali ed evitare di mantenere lo stato nei moduli, se è necessaria la sicurezza dei thread.
Storia
In un progetto multFile, la variabile di modulo era stata dichiarata con il modificatore
Friend(invece diPublic). Si sperava che fosse accessibile in tutti i progetti correlati della soluzione, ma si rivelò visibile solo all'interno di un'assembly, causando errori di accesso inattesi durante la fase di integrazione.
Storia
Dopo l'ottimizzazione del codice, i flag logici del processo hanno smesso di funzionare, poiché il costruttore della classe non riceveva il modulo dove era definito il flag log-statico. Di conseguenza, veniva utilizzata la vecchia versione del valore, portando il sistema a lavorare con dati obsoleti, e un bug è stato indagato a lungo a causa della complessità nel tracciare il punto di modifica dello stato della variabile di modulo.