Share via


Références aux éléments déclarés (Visual Basic)

Lorsque votre code fait référence à un élément déclaré, le compilateur Visual Basic établit une correspondance entre le nom indiqué dans votre référence et la déclaration appropriée de ce nom. Si plusieurs éléments sont déclarés avec le même nom, vous pouvez contrôler lequel de ces éléments doit être référencé en qualifiant son nom.

Le compilateur essaie de faire correspondre une référence de nom à une déclaration de nom avec la portée la plus restreinte. Cela signifie qu'il commence par le code qui effectue la référence et qu'il parcourt ensuite les niveaux successifs d'éléments conteneurs.

L'exemple suivant montre des références à deux variables avec le même nom. Cet exemple déclare deux variables, chacune nommée totalCount, à différents niveaux de portée dans le module container. Lorsque la procédure showCount affiche totalCount sans qualification, le compilateur Visual Basic résout la référence à la déclaration avec la plus petite portée, à savoir la déclaration locale à l'intérieur de showCount. Lorsqu'il qualifie totalCount avec le module conteneur container, le compilateur résout la référence à la déclaration avec la portée plus générale.

' Assume these two modules are both in the same assembly.
Module container
    Public totalCount As Integer = 1
    Public Sub showCount()
        Dim totalCount As Integer = 6000
        ' The following statement displays the local totalCount (6000).
        MsgBox("Unqualified totalCount is " & CStr(totalCount))
        ' The following statement displays the module's totalCount (1).
        MsgBox("container.totalCount is " & CStr(container.totalCount))
    End Sub
End Module
Module callingModule
    Public Sub displayCount()
        container.showCount()
        ' The following statement displays the containing module's totalCount (1).
        MsgBox("container.totalCount is " & CStr(container.totalCount))
    End Sub
End Module

Qualification d'un nom d'élément

Si vous souhaitez substituer ce processus de recherche et spécifier un nom déclaré dans une portée plus générale, vous devez qualifier le nom avec l'élément conteneur de la portée plus générale. Dans certains cas, vous devrez peut-être qualifier aussi l'élément conteneur.

La qualification d'un nom revient à le faire précéder, dans votre instruction source, d'informations qui identifient l'emplacement où l'élément cible est défini. Ces informations portent le nom de chaîne de qualification. Elles peuvent inclure un ou plusieurs espaces de noms et un module, une classe ou une structure.

La chaîne de qualification doit spécifier clairement le module, la classe ou la structure qui contient l'élément cible. Le conteneur peut se trouver dans un autre élément conteneur, en général un espace de noms. Vous devrez peut-être inclure plusieurs éléments conteneurs dans la chaîne de qualification.

Pour accéder à un élément déclaré en qualifiant son nom

  1. Déterminez l'emplacement dans lequel l'élément a été défini. Il peut s'agir d'un espace de noms, ou même d'une hiérarchie d'espaces de noms. Dans l'espace de noms de plus bas niveau, l'élément doit être contenu dans un module, une classe ou une structure.

    ' Assume the following hierarchy exists outside your code.
    Namespace outerSpace
        Namespace innerSpace
            Module holdsTotals
                Public Structure totals
                    Public thisTotal As Integer
                    Public Shared grandTotal As Long
                End Structure
            End Module
        End Namespace
    End Namespace
  2. Déterminez un chemin d'accès de qualification basé sur l'emplacement de l'élément cible. Commencez avec l'espace de noms de plus haut niveau, continuez avec l'espace de noms de plus bas niveau, puis finissez par le module, la classe ou la structure qui contient l'élément cible. Chaque élément du chemin d'accès doit contenir l'élément qui le suit.

    outerSpace → innerSpace → holdsTotals → totals

  3. Préparez la chaîne de qualification pour l'élément cible. Placez un point (.) après chaque élément dans le chemin d'accès. Votre application doit avoir accès à chaque élément de votre chaîne de qualification.

    outerSpace.innerSpace.holdsTotals.totals.
  4. Écrivez de manière normale l'instruction d'expression ou d'assignation qui fait référence à l'élément cible.

    grandTotal = 9000
  5. Placez la chaîne de qualification avant le nom de l'élément cible. Le nom doit suivre immédiatement le point (.) qui suit le module, la classe ou la structure qui contient l'élément.

    ' Assume the following module is part of your code.
    Module accessGrandTotal
        Public Sub setGrandTotal()
            outerSpace.innerSpace.holdsTotals.totals.grandTotal = 9000
        End Sub
    End Module
  6. Le compilateur utilise la chaîne de qualification pour rechercher une déclaration claire et non équivoque à laquelle il peut faire correspondre la référence de l'élément cible.

Vous devrez peut-être également qualifier une référence de nom si votre application a accès à plusieurs éléments de programmation avec le même nom. Par exemple, les espaces de noms System.Windows.Forms et System.Web.UI.WebControls contiennent tous deux une classe Label (Label et Label). Si votre application utilise les deux ou si elle définit sa propre classe Label, vous devez faire la distinction entre les différents objets Label. Incluez l'alias d'espace de noms ou d'importation dans la déclaration de variable. L'exemple suivant utilise l'alias d'importation.

' The following statement must precede all your declarations.
Imports win = System.Windows.Forms, web = System.Web.UI.WebControls
' The following statement references the Windows.Forms.Label class.
Dim winLabel As New win.Label()

Membres d'autres éléments conteneurs

Lorsque vous utilisez un membre non partagé d'une autre classe ou structure, vous devez d'abord qualifier le nom du membre avec une variable ou une expression qui pointe vers une instance de la classe ou structure. Dans l'exemple suivant, demoClass est une instance d'une classe nommée class1.

Dim demoClass As class1 = New class1()
demoClass.someSub[(argumentlist)]

Vous ne pouvez pas utiliser le nom de la classe pour qualifier un membre qui n'est pas Shared (Visual Basic). Vous devez d'abord créer une instance dans une variable objet (dans ce cas-ci demoClass), puis la référencer par le nom de la variable.

Si une classe ou une structure a un membre Shared, vous pouvez qualifier ce membre avec le nom de structure ou de classe ou avec une variable ou expression qui pointe vers une instance.

Un module n'a pas d'instances séparées et tous ses membres sont Shared par défaut. Par conséquent, vous qualifiez un membre de module avec le nom du module.

L'exemple suivant montre des références qualifiées à des procédures de membre de module. Cet exemple déclare deux procédures Sub, toutes deux nommées perform dans différents modules d'un projet. Chacune d'elles peut être spécifiée sans qualification dans son propre module, mais doit être qualifiée si elle est référencée ailleurs. La dernière référence dans module3 ne qualifiant pas perform, le compilateur ne peut pas résoudre cette référence.

' Assume these three modules are all in the same assembly.
Module module1
    Public Sub perform()
        MsgBox("module1.perform() now returning")
    End Sub
End Module
Module module2
    Public Sub perform()
        MsgBox("module2.perform() now returning")
    End Sub
    Public Sub doSomething()
        ' The following statement calls perform in module2, the active module.
        perform()
        ' The following statement calls perform in module1.
        module1.perform()
    End Sub
End Module
Module module3
    Public Sub callPerform()
        ' The following statement calls perform in module1.
        module1.perform()
        ' The following statement makes an unresolvable name reference
        ' and therefore generates a COMPILER ERROR.
        perform() ' INVALID statement
    End Sub
End Module

Références aux projets

Pour utiliser des éléments Public (Visual Basic) définis dans un autre projet, vous devez avant tout définir une référence à l'assembly ou la bibliothèque de types de ce projet. Pour définir une référence, cliquez sur Ajouter une référence dans le menu Projet ou utilisez l'option de compilateur de ligne de commande /reference (Visual Basic).

Vous pouvez, par exemple, utiliser le modèle objet XML du .NET Framework. Si vous définissez une référence à l'espace de noms System.Xml, vous pouvez déclarer et utiliser n'importe laquelle de ses classes, telles que XmlDocument. L'exemple suivant utilise XmlDocument :

' Assume this project has a reference to System.Xml
' The following statement creates xDoc as an XML document object.
Dim xDoc As System.Xml.XmlDocument

Importation d'éléments conteneurs

Il est possible d'utiliser l'instruction Imports (voir Imports, instruction (espace de noms et type .NET)) pour importer les espaces de noms contenant les modules ou classes que vous souhaitez utiliser. Cela vous permet de faire référence aux éléments définis dans un espace de noms importé sans qualifier complètement leurs noms. L'exemple suivant réécrit l'exemple précédent pour importer l'espace de noms System.Xml.

' Assume this project has a reference to System.Xml
' The following statement must precede all your declarations.
Imports System.Xml
' The following statement creates xDoc as an XML document object.
Dim xDoc As XmlDocument

En outre, l'instruction Imports peut définir un alias d'importation pour chaque espace de noms importé. Ainsi, votre code source est plus court et plus facile à lire. L'exemple suivant réécrit l'exemple précédent pour utiliser xD en tant qu'alias pour l'espace de noms System.Xml.

' Assume this project has a reference to System.Xml
' The following statement must precede all your declarations.
Imports xD = System.Xml
' The following statement creates xDoc as an XML document object.
Dim xDoc As xD.XmlDocument

L'instruction Imports ne rend pas d'éléments d'autres projets disponibles à votre application. C'est-à-dire qu'elle ne prend pas la place de la définition d'une référence. L'importation d'un espace de noms rend simplement inutile la qualification des noms définis dans cet espace de noms.

Vous pouvez aussi utiliser l'instruction Imports pour importer des modules, des classes, des structures et des énumérations. Vous pouvez ensuite utiliser les membres de ces éléments importés sans qualification. Toutefois, vous devez toujours qualifier les membres non partagés de classes et de structures avec une variable ou expression qui correspond à une instance de la classe ou de la structure.

Indications concernant l'attribution d'un nom

Lorsque vous définissez deux ou plusieurs éléments de programmation avec le même nom, il peut en résulter une ambiguïté de noms lorsque le compilateur tente de résoudre une référence à ce nom. Si plusieurs définitions sont dans la portée ou si aucune définition n'est dans la portée, la référence ne peut pas être résolue. Pour obtenir un exemple, consultez « Exemple de référence qualifiée » dans cette page d'aide.

Pour éviter toute ambiguïté, vous pouvez attribuer des noms uniques à tous vos éléments. Ensuite, vous pouvez faire référence à tout élément sans devoir qualifier son nom avec un espace de noms, un module ou une classe. Vous réduisez également les risques de faire référence par erreur à l'élément incorrect.

Occultation

Lorsque deux éléments de programmation partagent le même nom, l'un des deux peut masquer (ou occulter) l'autre. L'élément occulté n'est pas disponible à des fins de référence ; en effet, lorsque votre code utilise le nom de l'élément occulté, le compilateur Visual Basic le résout vers l'élément occultant. Pour obtenir des informations plus détaillées et des exemples, consultez Occultation dans Visual Basic.

Voir aussi

Tâches

Comment : modifier des propriétés de projet et des paramètres de configuration

Référence

Imports, instruction (espace de noms et type .NET)

New, opérateur (Visual Basic)

Public (Visual Basic)

Concepts

Noms d'éléments déclarés (Visual Basic)

Caractéristiques d'éléments déclarés (Visual Basic)

Variables en Visual Basic