Partager via


Déclaration de variable objet (Visual Basic)

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

La déclaration d’une variable telle qu’elle Object est identique à celle de la déclarer comme 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 les 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 configurez Option Strict Off pour autoriser la liaison tardive.

Syntaxe de déclaration

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

Dim variablename As [New] { objectclass | Object }  

Vous pouvez également spécifier public, protégé, ami, Protected Friendprivé, partagé ou statique 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 anticipée

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 Object type de données. 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. Il s’agit de la liaison tardive. La liaison tardive nécessite un temps d’exécution supplémentaire. Il limite également votre code aux méthodes et propriétés de la classe que vous 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 classe différente.

Lorsque vous connaissez la classe spécifique au moment de la compilation, vous devez déclarer la variable d’objet à être de cette classe. Il s’agit de la liaison anticipée. La liaison anticipée 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 l’exemple de déclaration précédent, 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 de code plus rapide

Accès aux membres de variables d’objet

Lorsque Option Strict est activé On, une variable objet peut accéder uniquement aux méthodes et propriétés de la classe avec laquelle vous la déclarez. L’exemple suivant illustre cela.

' 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 ne peut utiliser que les membres de la Object classe elle-même, qui n’incluent pas la Left propriété. En revanche, q a été déclaré comme étant de type Label, donc il peut utiliser toutes les méthodes et propriétés de la classe Label située dans l'espace de noms System.Windows.Forms.

Flexibilité des variables d’objet

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

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 d’objet qui fait référence spécifiquement à specialForm, comme l’illustre 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 dans l’exemple précédent limite la variable nextForm aux objets de classe specialForm, mais elle rend également toutes les méthodes et propriétés specialForm disponibles nextForm, ainsi 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 comme étant de type Form, comme l’illustre l’exemple suivant.

Dim anyForm As System.Windows.Forms.Form  

La déclaration dans l’exemple précédent vous permet d’affecter n’importe quel formulaire dans votre application à anyForm. Toutefois, bien qu’il anyForm puisse accéder à tous les membres de la classe Form, il ne peut pas utiliser les méthodes ou propriétés supplémentaires définies pour des formulaires spécifiques tels 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