Partager via


Inférence de type local (Visual Basic)

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 Objectet 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).

Voir aussi