Dans Visual Basic, le mot-clé Imports est utilisé pour connecter des espaces de noms, facilitant l'accès aux classes et fonctions sans avoir à spécifier toute la hiérarchie. Cela est particulièrement important lors du travail sur de grands projets ou de l'utilisation de bibliothèques tierces.
Dans les premières versions de VB, l'utilisation de classes externes était compliquée en raison de la nécessité de spécifier constamment le chemin complet vers le type. Avec l'arrivée des espaces de noms et de l'instruction Imports, les développeurs ont obtenu un moyen pratique de connecter les sections nécessaires d'une bibliothèque, accélérant ainsi le travail.
Lorsque deux bibliothèques contiennent des types avec des noms identiques, il existe un risque d'ambiguïté. De plus, un nombre excessif d'instructions Imports peut conduire à des conflits et des erreurs de résolution de noms.
Pour éviter la confusion, il est recommandé d'utiliser des alias via la construction Imports alias = Namespace.Type, et en cas de conflit, d'indiquer explicitement le nom complet du type dans le code.
Exemple de code :
Imports System.Text Imports txt = System.Text Module Module1 Sub Main() Dim sb As New StringBuilder() txt.StringBuilder 'Utilisation de l'alias End Sub End Module
Caractéristiques clés :
L'instruction Imports peut-elle être placée à l'intérieur d'une procédure ou d'une classe ?
Non, l'instruction Imports est autorisée uniquement au niveau du fichier ou de l'espace de noms, mais pas à l'intérieur des procédures, fonctions ou classes. La placer à l'intérieur d'un bloc de code générera une erreur de compilation.
Que se passe-t-il si des types identiques provenant de différents espaces de noms sont utilisés sans alias ?
Lors de la tentative d'accès à un type avec un conflit de noms non résolu, le compilateur renverra une erreur : "Type is ambiguous in the namespace". Il faut soit indiquer explicitement le chemin complet, soit utiliser des alias.
Imports System.Drawing Imports MyProject.Drawing Sub Foo() Dim img As Image ' Erreur d'ambiguïté Dim sysImg As System.Drawing.Image ' Correct End Sub
Peut-on utiliser Imports pour connecter un espace de noms d'une assembly non enregistrée ?
Non, avant d'utiliser Imports, l'assembly doit être ajoutée au projet via "Add Reference". Sinon, le compilateur ne verra pas l'espace de noms externe.
Un développeur a ajouté à la fois Imports System.Data et Imports System.Web.UI.WebControls sans alias. Plus tard, un conflit avec le nom DataTable est survenu dans le code, et il a passé beaucoup de temps à chercher la cause de l'erreur.
Avantages :
Inconvénients :
Un autre développeur utilise l'importation alias : Imports DBTable = System.Data.DataTable, ce qui lui permet de distinguer clairement les objets, même si d'autres espaces contiennent des noms similaires.
Avantages :
Inconvénients :