Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Mise à jour : novembre 2007
Cette page répertorie quelques problèmes courants qui peuvent se produire lors de l'utilisation des variables en Visual Basic.
Impossible d'accéder aux membres d'un objet
Si votre code essaie d'accéder à une propriété ou une méthode sur un objet, deux types d'erreur possibles peuvent se produire :
Le compilateur peut générer un message d'erreur si vous déclarez la variable objet comme étant d'un type spécifique puis vous faites référence à un membre qui n'est pas défini par ce type.
Une exception MemberAccessException runtime se produit lorsque l'objet assigné à une variable objet n'expose pas le membre que votre code essaie d'accéder. Dans le cas d'une variable de type de données Object, vous pouvez également obtenir cette exception si le membre n'a pas la valeur Public. Ceci s'explique par le fait que la liaison tardive autorise l'accès uniquement aux membres Public.
Lorsque l'instruction Option Strict affecte la valeur On, à la vérification de type, une variable objet ne peut accéder qu'aux méthodes et aux propriétés de la classe utilisée pour sa déclaration. L'exemple suivant illustre ce comportement :
Option Strict On
Dim p As Object = New System.Windows.Forms.Label
Dim q As System.Windows.Forms.Label = New System.Windows.Forms.Label
Dim j, k As Integer
' The following statement generates a compiler error.
j = p.Left
' The following statement retrieves the left edge of the label
' in pixels.
k = q.Left
Dans cet exemple, p peut utiliser uniquement les membres de la classe Object elle-même, lesquels n'incluent pas la propriété Left. D'un autre côté, q a été déclaré comme étant de type Label, aussi il peut utiliser toutes les méthodes et les propriétés de la classe Label dans l'espace de noms System.Windows.Forms.
Approche correcte
Pour pouvoir accéder à tous les membres d'un objet d'une classe particulière, déclarez la variable objet comme étant du type de cette classe, si possible. Sinon, si vous ne connaissez pas le type de l'objet au moment de la compilation, vous devez affecter Option Strict à Off et déclarer la variable comme étant du type de données Object. Cela permet d'assigner des objets de n'importe quel type à la variable, et vous devez faire en sorte que l'objet actuellement assigné soit d'un type acceptable. Pour ce faire, vous pouvez utiliser TypeOf, opérateur (Visual Basic).
D'autres composants ne peuvent pas accéder à votre variable
Les noms Visual Basic ne respectent pas la casse. Si deux noms ne se distinguent que par la casse, le compilateur les interprète comme un seul et même nom. Il considère, par exemple, que ABC et abc font référence au même élément déclaré.
Néanmoins, le Common Language Runtime (CLR) utilise des liaisons qui respectent la casse. En conséquence, lorsque vous générez un assembly ou une DLL et que vous les mettez à la disposition d'autres assemblys, vos noms respectent alors la casse. Par exemple, si vous définissez une classe avec un élément appelé ABC et que d'autres assemblys utilisent votre classe via le Common Language Runtime, ils doivent faire référence à l'élément sous la forme ABC. Si, par la suite, vous recompilez votre classe et que vous changez le nom de l'élément en abc, les autres assemblys qui utilisent votre classe ne peuvent plus accéder à cet élément. Dès lors, lorsque vous libérez une version mise à jour d'un assembly, évitez de modifier la casse des éléments publics.
Pour plus d'informations, consultez Common Language Runtime.
Approche correcte
Pour permettre à d'autres composants d'accéder à vos variables, considérez leurs noms comme s'ils respectaient la casse. Lorsque vous testez votre classe ou module, vérifiez que les autres assemblys se lient aux variables prévues. Une fois que vous avez publié un composant, ne modifiez pas les noms de variables existants, et notamment leurs casses.
Variable incorrecte utilisée
Lorsque plusieurs variables ont le même nom, le compilateur Visual Basic essaie de résoudre chaque référence à ce nom. Si les variables ont une portée différente, le compilateur résout une référence à la déclaration dont la portée est la plus petite. Si elles ont la même portée, la résolution échoue et le compilateur signale une erreur. Pour plus d'informations, consultez Résolution d'une référence lorsque plusieurs variables ont le même nom.
Approche correcte
Évitez d'utiliser des variables qui ont le même nom, mais une portée différente. Si vous utilisez d'autres assemblys ou projets, évitez d'utiliser autant que possible des noms définis dans ces composants externes. Si plusieurs variables ont le même nom, n'oubliez pas de qualifier chaque référence à celui-ci. Pour plus d'informations, consultez Comment : faire la distinction entre deux éléments portant le même nom.
Voir aussi
Tâches
Comment : accéder aux membres d'un objet
Comment : déterminer le type désigné par une variable objet
Concepts
Déclaration de variable en Visual Basic
Variables objet dans Visual Basic
Déclaration des variables objets
Résolution d'une référence lorsque plusieurs variables ont le même nom