Partager via


Inférence de type local

Mise à jour : Juillet 2008

Dans Visual Basic 2008, le compilateur utilise l'inférence de type pour déterminer les types de données de variables locales, déclarés sans clause As. Le compilateur déduit le type de variable à partir du type d'expression d'initialisation. Cela vous permet de déclarer des variables sans déclarer de type explicitement, comme le montre l'exemple qui suit.

Public Sub inferenceExample()

    ' Using explicit typing.
    Dim num1 As Integer = 3

    ' Using local type inference.
    Dim num2 = 3

End Sub
Remarque :

L'inférence de type local ne peut pas être utilisée pour déclarer les champs de classe. Dans l'exemple précédent, si num2 est un champ et non une variable locale, la déclaration provoque une erreur avec Option Strict et classe num2 en tant qu'Object, tandis que l' Option Strict est désactivée. De la même façon, les types de variables statiques ne peuvent être déduits, lorsque l'Option Strict est activée. Lorsque l'Option Strict est désactivée, le type staticVar dans Static staticVar = 5 est Object.

Le code qui utilise l'inférence de type ressemble au code basé sur la liaison tardive. Toutefois, l'inférence de type assigne un type fort à la variable, au lieu de la conserver en tant qu'Object. Le compilateur utilise l'initialiseur de variable, pour déterminer le type de la variable au moment de la compilation et produire le code à liaison anticipée. Dans l'exemple précédent, num2 est tapé en tant qu'Integer.

Le comportement de 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. Le fait de connaître le type tôt permet au compilateur d'identifier les problèmes avant exécution, d'allouer la mémoire précisément et d'optimiser d'autres aspects. La liaison anticipée permet également à l'environnement de développement intégré Visual Basic (IDE) de fournir l'aide IntelliSense sur les membres d'un objet. La liaison anticipée est également préférable en termes de performance. Cela s'explique par le fait que toutes les données stockées dans une variable à liaison tardive doivent être encapsulées en tant que types Object, et l'accès aux membres du type au moment de l'exécution ralentit le programme.

Remarque :

Si vous ne souhaitez pas que num2 reçoive le type Integer dans l'exemple précédent, vous pouvez spécifier un type différent en utilisant une déclaration telle que Dim num3 As Object = 3 ou Dim num4 As Double = 3.

Exemples

L'inférence de type se produit lorsqu'une variable locale est déclarée sans clause As et qu'elle reçoit une valeur. Le compilateur utilise le type de la valeur en tant que type de la variable. Par exemple, les lignes de code suivantes déclarent chacune une variable de type String.

' Using explicit typing.
Dim name1 As String = "Springfield"

' Using local type inference.
Dim name2 = "Springfield"

Le code suivant démontre deux façons équivalentes de créer une table 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}

Vous pouvez 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, parce que someNumbers2 est une table d'entiers.

Dim total = 0
For Each number In someNumbers2
    total += number
Next

L'inférence de type local peut être utilisée dans les instructions Using pour établir le type du nom de 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 être également déduit des valeurs de retour de fonctions, comme le montre l'exemple suivant. Les listes pList1 et pList2 sont des listes de processus.

' Using explicit typing.
Dim pList1() As Process = Process.GetProcesses()

' Using local type inference.
Dim pList2 = Process.GetProcesses()

Option Infer

Une nouvelle 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émarrage 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 pour les projets créés dans Visual Basic 2008, et Option Infer Off pour les projets mis à niveau à partir de versions antérieures. Pour plus d'informations, consultez Option Infer, instruction et /optioninfer.

Remarque :

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 dans le fichier est prioritaire.

Restrictions

L'inférence de type ne peut être utilisée que pour les variables locales non statiques ; elle ne peut être utilisée pour déterminer le type des champs de classe, des propriétés ou des fonctions.

Voir aussi

Concepts

Types anonymes

Liaison anticipée et liaison tardive

Introduction à LINQ dans Visual Basic

Référence

For Each...Next, instruction (Visual Basic)

For...Next, instruction (Visual Basic)

Option Infer, instruction

/optioninfer

Historique des modifications

Date

Historique

Raison

Juillet 2008

Modification du nom de la variable de contrôle de boucle dans le texte dans la section « Exemples » de num à number pour correspondre au nom dans le code.

Commentaires client.