Détermination du type Object (Visual Basic)
Les variables d’objet génériques (autrement dit, les variables que vous déclarez en tant que Object
) peuvent contenir des objets de n’importe quelle classe. Lorsque vous utilisez des variables de type Object
, vous devrez peut-être effectuer différentes actions en fonction de la classe de l’objet ; par exemple, certains objets peuvent ne pas prendre en charge une propriété ou une méthode particulière. Visual Basic fournit deux moyens de déterminer quel type d’objet est stocké dans une variable d’objet : la fonction TypeName
et l’opérateur TypeOf...Is
.
TypeName et TypeOf…Is
La fonction TypeName
renvoie une chaîne et constitue le meilleur choix lorsque vous devez stocker ou afficher le nom de classe d’un objet, comme indiqué dans le fragment de code suivant :
Dim Ctrl As Control = New TextBox
MsgBox(TypeName(Ctrl))
L’opérateur TypeOf...Is
est le meilleur choix pour tester le type d’un objet, car il est beaucoup plus rapide qu’une comparaison de chaînes équivalente à l’aide de TypeName
. Le fragment de code suivant utilise TypeOf...Is
dans une instruction If...Then...Else
:
If TypeOf Ctrl Is Button Then
MsgBox("The control is a button.")
End If
Une mise en garde s’impose ici. L’opérateur TypeOf...Is
renvoie True
si un objet est d’un type spécifique ou est dérivé d’un type spécifique. Presque tout ce que vous faites avec Visual Basic implique des objets, qui incluent certains éléments qui ne sont normalement pas considérés comme des objets, tels que des chaînes et des entiers. Ces objets sont dérivés de et héritent des méthodes de Object. Lorsqu’un Integer
lui a été transmis et qu’il a été évalué avec Object
, l’opérateur TypeOf...Is
renvoie True
. L’exemple suivant indique que le paramètre InParam
est à la fois un Object
et un Integer
:
Sub CheckType(ByVal InParam As Object)
' Both If statements evaluate to True when an
' Integer is passed to this procedure.
If TypeOf InParam Is Object Then
MsgBox("InParam is an Object")
End If
If TypeOf InParam Is Integer Then
MsgBox("InParam is an Integer")
End If
End Sub
L’exemple suivant utilise à la fois TypeOf...Is
et TypeName
pour déterminer le type d’objet qui lui a été transmis dans l’argument Ctrl
. La procédure TestObject
appelle ShowType
avec trois types de contrôles différents.
Pour exécuter l'exemple
Créez un projet d’application Windows et ajoutez un contrôle Button, un contrôle CheckBox et un contrôle RadioButton au formulaire.
À partir du bouton de votre formulaire, appelez la procédure
TestObject
.Ajoutez le code suivant à votre formulaire :
Sub ShowType(ByVal Ctrl As Object) 'Use the TypeName function to display the class name as text. MsgBox(TypeName(Ctrl)) 'Use the TypeOf function to determine the object's type. If TypeOf Ctrl Is Button Then MsgBox("The control is a button.") ElseIf TypeOf Ctrl Is CheckBox Then MsgBox("The control is a check box.") Else MsgBox("The object is some other type of control.") End If End Sub Protected Sub TestObject() 'Test the ShowType procedure with three kinds of objects. ShowType(Me.Button1) ShowType(Me.CheckBox1) ShowType(Me.RadioButton1) End Sub