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 :
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.