Déclaration des variables objets (Visual Basic)

Vous utilisez une instruction de déclaration normale pour déclarer une variable objet. Pour le type de données, vous spécifiez Object (c’est-à-dire le type de données d’objet) ou une classe plus spécifique à partir de laquelle l’objet doit être créé.

Déclarer une variable en tant que Object équivaut à la déclarer en tant que System.Object.

Lorsque vous déclarez une variable avec une classe d’objet spécifique, elle peut accéder à toutes les méthodes et propriétés exposées par cette classe et aux classes dont elle hérite. Si vous déclarez la variable avec Object, elle peut accéder uniquement aux membres de la classe Object, sauf si vous souhaitez convertir Option Strict Off pour autoriser la liaison tardive.

Syntaxe de déclaration

Utilisez la syntaxe suivante pour déclarer une variable objet :

Dim variablename As [New] { objectclass | Object }  

Vous pouvez également spécifier Public, Protected, Friend, Protected Friend, Private, Shared, ou Static dans la déclaration. Les exemples de déclarations suivants sont valides :

Private objA As Object  
Static objB As System.Windows.Forms.Label  
Dim objC As System.OperatingSystem  

Liaison tardive et liaison précoce

Parfois, la classe spécifique est inconnue jusqu’à ce que votre code s’exécute. Dans ce cas, vous devez déclarer la variable objet avec le type de données Object. Cela crée une référence générale à n’importe quel type d’objet, et la classe spécifique est affectée au moment de l’exécution. C’est ce qu’on appelle la liaison tardive. La liaison tardive nécessite un temps d’exécution supplémentaire. Elle limite également votre code aux méthodes et propriétés de la classe que vous lui avez récemment affectée. Cela peut entraîner des erreurs d’exécution si votre code tente d’accéder aux membres d’une autre classe.

Lorsque vous connaissez la classe spécifique au moment de la compilation, vous devez déclarer la variable objet comme appartenant à cette classe. Il s’agit de la liaison anticipée. La liaison précoce améliore les performances et garantit l’accès de votre code à toutes les méthodes et propriétés de la classe spécifique. Dans les exemples de déclarations précédents, si la variable objA utilise uniquement des objets de classe System.Windows.Forms.Label, vous devez spécifier As System.Windows.Forms.Label dans sa déclaration.

Avantages de la liaison anticipée

La déclaration d’une variable objet en tant que classe spécifique vous offre plusieurs avantages :

  • Vérification automatique des types

  • Accès garanti à tous les membres de la classe spécifique

  • Prise en charge de Microsoft IntelliSense dans l’éditeur de code

  • Meilleure lisibilité de votre code

  • Moins d’erreurs dans votre code

  • Erreurs interceptées au moment de la compilation plutôt qu’au moment de l’exécution

  • Exécution du code plus rapide

Accès aux membres de variable d’objet

Quand Option Strict est converti en On, une variable objet peut accéder uniquement aux méthodes et aux propriétés de la classe avec laquelle vous la déclarez. L'exemple suivant illustre ce comportement.

' Option statements must precede all other source file lines.  
Option Strict On  
' Imports statement must precede all declarations in the source file.  
Imports System.Windows.Forms  
Public Sub accessMembers()  
    Dim p As Object  
    Dim q As System.Windows.Forms.Label  
    p = New System.Windows.Forms.Label  
    q = 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  
End Sub  

Dans cet exemple, p peut utiliser uniquement les membres de la Object classe proprement dite, qui n’incluent pas la propriété Left . En revanche, q a été déclaré comme étant de type Label. Il peut donc utiliser toutes les méthodes et propriétés de la classe Label dans l’espace de noms System.Windows.Forms .

Flexibilité des variables d’objet

Lorsque vous travaillez avec des objets dans une hiérarchie d’héritage, vous avez le choix de la classe à utiliser pour déclarer vos variables d’objet. Dans ce choix, vous devez équilibrer la flexibilité de l’affectation d’objet et l’accès aux membres d’une classe. Par exemple, considérez la hiérarchie d’héritage qui mène à la classe System.Windows.Forms.Form :

Object

  MarshalByRefObject

    Component

      Control

        ScrollableControl

          ContainerControl

            Form

Supposons que votre application définit une classe de formulaire appelée specialForm, qui hérite de la classe Form. Vous pouvez déclarer une variable objet qui fait spécifiquement référence à specialForm, comme le montre l’exemple suivant.

Public Class specialForm  
    Inherits System.Windows.Forms.Form  
    ' Insert code defining methods and properties of specialForm.  
End Class  
Dim nextForm As New specialForm  

La déclaration de l’exemple précédent limite la variable nextForm aux objets de la classe specialForm, mais elle met également toutes les méthodes et propriétés de specialForm à la disposition de nextForm , insi que tous les membres de toutes les classes dont specialForm hérite.

Vous pouvez rendre une variable d’objet plus générale en la déclarant de type Form, comme le montre l’exemple suivant.

Dim anyForm As System.Windows.Forms.Form  

La déclaration de l’exemple précédent vous permet d’affecter n’importe quel formulaire de votre application à anyForm. Toutefois, bien que anyForm puisse accéder à tous les membres de la classe Form, elle ne peut utiliser aucune des méthodes ou propriétés supplémentaires définies pour des formes spécifiques telles que specialForm.

Tous les membres d’une classe de base sont disponibles pour les classes dérivées, mais les membres supplémentaires d’une classe dérivée ne sont pas disponibles pour la classe de base.

Voir aussi