Notes
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.
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 Friend
privé, 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 :
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.