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.
Le compilateur Visual Basic utilise l’inférence de type pour déterminer les types de données des variables locales déclarées sans As
clause. 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 un type, comme illustré dans l’exemple suivant. À la suite de ces déclarations, num1
et num2
sont tous deux fortement typés comme des entiers.
Public Sub inferenceExample()
' Using explicit typing.
Dim num1 As Integer = 3
' Using local type inference.
Dim num2 = 3
End Sub
Remarque
Si vous ne souhaitez pas que num2
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
.
Remarque
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 local 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). Si num2
dans l’exemple précédent était un champ de classe au lieu d’une variable locale dans une procédure, la déclaration provoquerait une erreur avec Option Strict
activée et classifierait num2
comme étant Object
avec Option Strict
désactivée. De même, l’inférence de type local ne s’applique pas aux variables de niveau procédure déclarées en tant que Static
.
Inférence de type et liaison tardive
Le code qui utilise l’inférence de type ressemble au code qui repose sur la liaison tardive. Cependant, l’inférence de type type la variable de manière forte au lieu de la laisser sous la forme Object
. Le compilateur utilise l’initialiseur d’une variable pour déterminer le type de la variable lors de la compilation afin de produire un code à liaison précoce. Dans l’exemple précédent, num2
, comme num1
, est tapé comme un Integer
.
Le comportement des variables à liaison anticipée diffère de celui des variables liées tardives, pour lesquelles le type est connu uniquement au moment de l’exécution. Connaître le type tôt permet au compilateur d’identifier les problèmes avant l’exécution, d’allouer la mémoire précisément et d’effectuer d’autres optimisations. La liaison anticipée permet également à l’environnement de développement intégré Visual Basic (IDE) de fournir de l’aide IntelliSense sur les membres d’un objet. La liaison précoce est également préférable pour des raisons de performances Cela est dû au fait que 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 rend le programme plus lent.
Exemples
L’inférence de type se produit lorsqu’une variable locale est déclarée sans As
clause 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 façons équivalentes de 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
, 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 Using
les instructions pour établir le type du nom de la ressource, comme l’illustre 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 l’illustre l’exemple suivant. À la fois pList1
et pList2
sont 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()
Inférence d’option
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 dans Option Infer
votre code, la valeur par défaut du compilateur est Option Infer On
.
Si la valeur définie Option Infer
dans un fichier est en conflit avec la valeur définie dans l’IDE ou sur la ligne de commande, la valeur du fichier est prioritaire.
Pour plus d’informations, consultez l’instruction Option Infer et la page Compiler, Concepteur de projets (Visual Basic).