In Visual Basic la parola chiave Imports è usata per connettere i namespace, semplificando l'accesso a classi e funzioni senza dover specificare l'intera gerarchia. Questo è particolarmente importante quando si lavora con grandi progetti o si utilizzano librerie esterne.
Nelle prime versioni di VB, l'utilizzo di classi esterne era complicato a causa della necessità di dover specificare continuamente il percorso completo per il tipo. Con l'introduzione dei namespace e dell'istruzione Imports, gli sviluppatori hanno ottenuto un modo conveniente per importare le sezioni necessarie della libreria, accelerando il lavoro.
Quando in due librerie ci sono tipi con nomi identici, c'è il rischio di ambiguità. Inoltre, un numero eccessivo di righe con istruzioni Imports può portare a conflitti ed errori di risoluzione dei nomi.
Per evitare confusione, è consigliabile utilizzare alias tramite la costruzione Imports alias = Namespace.Type, e in caso di conflitto, specificare esplicitamente il nome completo del tipo nel codice.
Esempio di codice:
Imports System.Text Imports txt = System.Text Module Module1 Sub Main() Dim sb As New StringBuilder() txt.StringBuilder 'Utilizziamo l'alias End Sub End Module
Caratteristiche principali:
Può l'istruzione Imports essere posizionata all'interno di una procedura o classe?
No, l'istruzione Imports è consentita solo a livello di file o namespace, ma non all'interno di procedure, funzioni o classi. Posizionarla all'interno di un blocco di codice genererebbe un errore di compilazione.
Cosa succede se si usano tipi identici da namespace diversi senza alias?
Quando si tenta di accedere a un tipo con un conflitto di nomi non risolto, il compilatore genererà un errore: "Type is ambiguous in the namespace". È necessario specificare esplicitamente il percorso completo o utilizzare alias.
Imports System.Drawing Imports MyProject.Drawing Sub Foo() Dim img As Image ' Errore di ambiguità Dim sysImg As System.Drawing.Image ' Corretto End Sub
È possibile utilizzare Imports per connettere un namespace da un'assembly non registrata?
No, prima di utilizzare Imports, l'assembly deve essere aggiunta al progetto tramite "Add Reference". Senza questo, il compilatore non riconoscerà il namespace esterno.
Un sviluppatore ha aggiunto simultaneamente Imports System.Data e Imports System.Web.UI.WebControls senza alias. Più tardi nel codice si è verificato un conflitto con il nome DataTable, e ha speso molto tempo a cercare la causa dell'errore.
Vantaggi:
Svantaggi:
Un altro sviluppatore utilizza l'importazione con alias: Imports DBTable = System.Data.DataTable, il che gli consente di distinguere chiaramente gli oggetti, anche se ci sono nomi simili in altri namespace.
Vantaggi:
Svantaggi: