Inférence de type local (Visual Basic)
Le compilateur Visual Basic utilise l’inférence de type permet de déterminer le type de données des variables locales déclarées sans clause As
. Le compilateur déduit le type de la variable à partir du type de l’expression d’initialisation. Cela vous permet de déclarer des variables sans indiquer explicitement de type, comme illustré dans l’exemple suivant. En raison des déclarations, num1
et num2
sont fortement typés en tant qu’entiers.
Public Sub inferenceExample()
' Using explicit typing.
Dim num1 As Integer = 3
' Using local type inference.
Dim num2 = 3
End Sub
Notes
Si vous ne souhaitez num2
pas que dans l’exemple précédent soit tapé en tant que Integer
, vous pouvez spécifier un autre type à l’aide d’une déclaration comme Dim num3 As Object = 3
ou Dim num4 As Double = 3
.
Notes
L’inférence de type ne peut être utilisée que pour les variables locales non statiques ; il ne peut pas être utilisé pour déterminer le type de champs, de propriétés ou de fonctions de classe.
L’inférence de type s’applique au niveau de la procédure. Il ne peut pas être utilisé pour déclarer des variables au niveau du module (au sein d’une classe, d’une structure, d’un module ou d’une interface, mais pas au sein d’une procédure ou d’un bloc). Sinum2
, dans l’exemple précédent, était un champ d’une classe au lieu d’une variable locale dans une procédure, la déclaration provoquerait une erreur avec Option Strict
on et la classifiait num2
comme étant Object
avec Option Strict
. De même, l’inférence de type local ne s’applique pas aux variables de niveau procédure déclarées comme Static
.
Inférence de type et liaison tardive
Le code qui utilise l’inférence de type ressemble au code qui s’appuie sur une liaison tardive. Toutefois, l’inférence de type tape fortement la variable au lieu de la laisser en tant que Object
. Le compilateur utilise l’initialiseur d’une variable pour déterminer le type de la variable au moment de la compilation afin de produire du code lié en amont. Dans l’exemple précédent, num2
, comme num1
, est défini sur un type en tant que Integer
.
Le comportement des variables à liaison anticipée diffère de celui des variables à liaison tardive, pour lesquelles le type n’est connu qu’au moment de l’exécution. La connaissance précoce du type permet au compilateur d’identifier les problèmes avant l’exécution, d’allouer de la mémoire avec précision et d’effectuer d’autres optimisations. La liaison anticipée permet également à l’environnement de développement intégré (IDE) Visual Basic de fournir une aide IntelliSense sur les membres d’un objet. La liaison anticipée est également recommandée pour les performances. En effet, toutes les données stockées dans une variable à liaison tardive doivent être encapsulées en tant que type Object
et l’accès aux membres du type au moment de l’exécution ralentit le programme.
Exemples
L’inférence de type se produit lorsqu’une variable locale est déclarée sans clause As
et initialisée. Le compilateur utilise le type de la valeur initiale affectée comme type de la variable. Par exemple, chacune des lignes de code suivantes déclare une variable de type String
.
' Using explicit typing.
Dim name1 As String = "Springfield"
' Using local type inference.
Dim name2 = "Springfield"
Le code suivant illustre deux méthodes équivalentes pour créer un tableau d’entiers.
' Using explicit typing.
Dim someNumbers1() As Integer = New Integer() {4, 18, 11, 9, 8, 0, 5}
' Using local type inference.
Dim someNumbers2 = New Integer() {4, 18, 11, 9, 8, 0, 5}
Il est pratique d’utiliser l’inférence de type pour déterminer le type d’une variable de contrôle de boucle. Dans le code suivant, le compilateur déduit que number
est un Integer
car someNumbers2
, à partir de l’exemple précédent, est un tableau d’entiers.
Dim total = 0
For Each number In someNumbers2
total += number
Next
L’inférence de type local peut être utilisée dans des instructions Using
pour établir le type du nom de la ressource, comme le montre l’exemple suivant.
Using proc = New System.Diagnostics.Process
' Insert code to work with the resource.
End Using
Le type d’une variable peut également être déduit des valeurs de retour des fonctions, comme le montre l’exemple suivant. pList1
et pList2
sont tous deux des tableaux de processus, car Process.GetProcesses
retourne un tableau de processus.
' Using explicit typing.
Dim pList1() As Process = Process.GetProcesses()
' Using local type inference.
Dim pList2 = Process.GetProcesses()
Option Infer
Option Infer
vous permet de spécifier si l’inférence de type local est autorisée dans un fichier particulier. Pour activer ou bloquer l’option, tapez l’une des instructions suivantes au début du fichier.
Option Infer On
Option Infer Off
Si vous ne spécifiez pas de valeur pour Option Infer
dans votre code, la valeur par défaut du compilateur est Option Infer On
.
Si la valeur définie pour Option Infer
dans un fichier est en conflit avec la valeur définie dans l'IDE ou sur la ligne de commande, la valeur contenue dans le fichier est prioritaire.
Pour plus d’informations, consultez Option Instruction d’inférence et Compiler la page, Concepteur de projet (Visual Basic).