Dépannage des variables en Visual Basic

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

Variables en Visual Basic

Déclaration de variable en Visual Basic

Variables objet dans Visual Basic

Déclaration des variables objets

Valeurs des variables objets

Résolution d'une référence lorsque plusieurs variables ont le même nom

Noms d'éléments déclarés