Option Strict Statement

Limite les conversions de type de données implicites à l’élargissement des conversions, interdit la liaison tardive et interdit la saisie implicite qui entraîne un Object type.

Syntaxe

Option Strict { On | Off }

Éléments

Terme Définition
On facultatif. Active la Option Strict vérification.
Off facultatif. Désactive la Option Strict vérification.

Remarques

Quand Option Strict On ou Option Strict apparaît dans un fichier, les conditions suivantes entraînent une erreur de compilation :

  • Conversions restrictives implicites

  • Liaison tardive

  • Saisie implicite qui génère un type Object

Notes

Dans les configurations d’avertissement que vous pouvez définir sur la page compilation, Project Concepteur (Visual Basic), il existe trois paramètres qui correspondent aux trois conditions qui provoquent une erreur de compilation. Pour plus d’informations sur l’utilisation de ces paramètres, consultez Pour définir des configurations d’avertissement dans l’IDE plus loin dans cette rubrique.

L’instruction Option Strict Off désactive l’erreur et la vérification des avertissements pour les trois conditions, même si les paramètres IDE associés spécifient pour activer ces erreurs ou avertissements. L’instruction Option Strict On active la vérification des erreurs et des avertissements pour les trois conditions, même si les paramètres IDE associés spécifient pour désactiver ces erreurs ou avertissements.

Si elle est utilisée, l’instruction Option Strict doit apparaître avant toute autre instruction de code dans un fichier.

Lorsque vous définissez Option StrictOnsur , Visual Basic vérifie que les types de données sont spécifiés pour tous les éléments de programmation. Les types de données peuvent être spécifiés explicitement ou spécifiés à l’aide de l’inférence de type local. La spécification des types de données pour tous vos éléments de programmation est recommandée, pour les raisons suivantes :

  • Il active la prise en charge d’IntelliSense pour vos variables et paramètres. Cela vous permet de voir leurs propriétés et d’autres membres au fur et à mesure que vous tapez du code.

  • Il permet au compilateur d’effectuer la vérification de type. La vérification des types vous permet de trouver des instructions qui peuvent échouer au moment de l’exécution en raison d’erreurs de conversion de type. Il identifie également les appels aux méthodes sur les objets qui ne prennent pas en charge ces méthodes.

  • Il accélère l’exécution du code. Pour cela, si vous ne spécifiez pas de type de données pour un élément de programmation, le compilateur Visual Basic l’affecte au Object type. Le code compilé peut avoir besoin de convertir de nouveau et d’autres Object types de données, ce qui réduit les performances.

Erreurs de conversion restrictive implicites

Les erreurs de conversion restrictive implicite se produisent quand une conversion de types de données implicite est une conversion restrictive.

Visual Basic peut convertir de nombreux types de données en d’autres types de données. La perte de données peut se produire lorsque la valeur d’un type de données est convertie en type de données qui a moins de précision ou une capacité plus petite. Une erreur d’exécution se produit si une telle conversion étroite échoue. Option Strict garantit la notification au moment de la compilation de ces conversions restrictives afin de pouvoir les éviter. Pour plus d’informations, consultez Conversions implicites et explicites et conversions étendues et étroites.

Les conversions qui peuvent entraîner des erreurs incluent des conversions implicites qui se produisent dans des expressions. Pour plus d'informations, voir les rubriques suivantes :

Lorsque vous concaténer des chaînes à l’aide de l’opérateur&, toutes les conversions vers les chaînes sont considérées comme étendues. Ces conversions ne génèrent donc pas d’erreur de conversion restrictive implicite, même si Option Strict elles sont activées.

Lorsque vous appelez une méthode qui a un argument qui a un type de données différent du paramètre correspondant, une conversion étroite provoque une erreur de compilation si Option Strict elle est activée. Vous pouvez éviter l’erreur de compilation à l’aide d’une conversion étendue ou d’une conversion explicite.

Les erreurs de conversion restrictive implicites sont supprimées au moment de la compilation pour les conversions des éléments d’une For Each…Next collection vers la variable de contrôle de boucle. Cela se produit même si Option Strict c’est le cas. Pour plus d’informations, consultez la section « Conversions étroites » dans For Each... Instruction suivante.

Erreurs de liaison tardive

Un objet est à liaison tardive quand il est assigné à une propriété ou à une méthode d’une variable déclarée comme étant de type Object. Pour plus d’informations, consultez Liaison anticipée et tardive.

Erreurs de type d’objet implicite

Les erreurs de type d’objet implicite se produisent quand un type approprié ne peut pas être déduit pour une variable déclarée, de sorte qu’un type Object est déduit. Cela se produit principalement quand vous utilisez une instruction Dim pour déclarer une variable sans utiliser une clause As et que Option Infer a la valeur Off. Pour plus d’informations, consultez l’instruction Option Infer et la spécification de langage Visual Basic.

Pour les paramètres de méthode, la As clause est facultative si Option Strict elle est désactivée. Toutefois, si un paramètre utilise une As clause, il doit tous l’utiliser. Si Option Strict c’est le cas, la As clause est requise pour chaque définition de paramètre.

Si vous déclarez une variable sans utiliser de As clause et définissez-la sur Nothing, la variable a un type de Object. Aucune erreur de compilation ne se produit dans ce cas quand Option Strict elle est activée et Option Infer est activée. Voici un exemple .Dim something = Nothing

Types de données et valeurs par défaut

Le tableau suivant décrit les résultats de différentes combinaisons de spécification du type de données et de l’initialiseur dans une instruction Dim.

Type de données spécifié ? Initialiseur spécifié ? Exemple Résultats
Non Non Dim qty Si Option Strict est désactivé (par défaut), la valeur affectée à la variable est Nothing.

Si Option Strict est activé, une erreur se produit au moment de la compilation.
Non Oui Dim qty = 5 Si Option Infer est activée (par défaut), la variable prend le type de données de l'initialiseur. Consultez l’inférence de type local.

Si Option Infer est désactivé et que Option Strict est désactivé, la variable prend le type de données de Object.

Si Option Infer est désactivé et que Option Strict est activé, une erreur se produit au moment de la compilation.
Oui Non Dim qty As Integer La variable est initialisée avec la valeur par défaut du type de données. Pour plus d’informations, consultez L’instruction Dim.
Oui Oui Dim qty As Integer = 5 Si le type de données de l’initialiseur ne peut pas être converti dans le type de données spécifié, une erreur se produit au moment de la compilation.

Lorsqu’une instruction option stricte n’est pas présente

Si le code source ne contient pas d’instructionOption Strict, le paramètre Option strict sur la page compilation, Project Concepteur (Visual Basic) est utilisé. La page Compilation possède des paramètres qui fournissent un contrôle supplémentaire sur les conditions qui génèrent une erreur.

Si vous utilisez le compilateur de ligne de commande, vous pouvez utiliser l’option du compilateur -optionstrict pour spécifier un paramètre pour Option Strict.

Pour définir l’option strict dans l’IDE

Notes

Il est possible que pour certains des éléments de l'interface utilisateur de Visual Studio, votre ordinateur affiche des noms ou des emplacements différents de ceux indiqués dans les instructions suivantes. L'édition de Visual Studio dont vous disposez et les paramètres que vous utilisez déterminent ces éléments. Pour plus d’informations, consultez Personnalisation de l’IDE.

  1. Dans Explorateur de solutions, sélectionnez un projet. Dans le menu Projet , cliquez sur Propriétés.

  2. Sous l’onglet Compilation , définissez la valeur dans la zone Option Strict .

Pour définir des configurations d’avertissement dans l’IDE

Lorsque vous utilisez la page Compilation, Project Concepteur (Visual Basic) au lieu d’une Option Strict instruction, vous avez un contrôle supplémentaire sur les conditions qui génèrent des erreurs. La section Configurations d’avertissement de la page compilation contient des paramètres qui correspondent aux trois conditions qui provoquent une erreur de compilation quand Option Strict elle est activée. Voici ces paramètres :

  • Conversion implicite

  • Liaison tardive ; l’appel peut échouer au moment de l’exécution

  • Type implicite ; objet pris par défaut

Quand vous affectez la valeur On à Option Strict, chacun de ces trois paramètres de configuration d’avertissement prend la valeur Erreur. Quand vous affectez la valeur Off à Option Strict, chacun des trois paramètres prend la valeur Aucun.

Vous pouvez remplacer individuellement chaque paramètre de configuration d’avertissement par Aucun, Avertissement ou Erreur. Si les trois paramètres de configuration d’avertissement sont définis sur Erreur, On apparaît dans la Option strict zone. Si les trois sont définis sur None, Off apparaît dans cette zone. Pour toute autre combinaison de ces paramètres, (personnalisé) s’affiche.

Pour définir le paramètre Par défaut Strict d’option pour les nouveaux projets

Lorsque vous créez un projet, le paramètre Option Strict sous l’onglet Compilation est défini sur le paramètre Option Strict dans la boîte de dialogue Options .

Pour définir Option Strict dans cette boîte de dialogue, dans le menu Outils , cliquez sur Options. Dans la boîte de dialogue Options, développez Projets et solutions, puis cliquez sur Valeurs par défaut VB. Le paramètre par défaut initial dans VB Valeurs par défaut est Off.

Pour définir l’option Strict sur la ligne de commande

Incluez l’option du compilateur -optionstrict dans la commande vbc .

Exemple 1

Les exemples suivants illustrent des erreurs de compilation causées par des conversions de type implicites qui réduisent les conversions. Cette catégorie d’erreurs correspond à la condition de conversion implicite sur la page compilation.

' If Option Strict is on, this implicit narrowing
' conversion causes a compile-time error.
' The commented statements below use explicit
' conversions to avoid a compile-time error.
Dim cyclists As Long = 5
Dim bicycles As Integer = cyclists
'Dim bicycles As Integer = CType(cyclists, Integer)
'Dim bicycles As Integer = CInt(cyclists)
'Dim bicycles As Integer = Convert.ToInt32(cyclists)


' If Option Strict is on, this implicit narrowing
' conversion causes a compile-time error.
' The commented statements below use explicit
' conversions to avoid a compile-time error.
Dim charVal As Char = "a"
'Dim charVal As Char = "a"c
'Dim charVal As Char = CType("a", Char)


' If Option Strict is on, a compile-time error occurs.
' If Option Strict is off, the string is implicitly converted
' to a Double, and then is added to the other number.
Dim myAge As Integer = "34" + 6


' If Option Strict is on, a compile-time error occurs.
' If Option Strict is off, the floating-point number
' is implicitly converted to a Long.
Dim num = 123.45 \ 10

Exemple 2

L’exemple suivant illustre une erreur de compilation causée par la liaison tardive. Cette catégorie d’erreurs correspond à la liaison tardive ; l’appel peut échouer à la condition d’exécution sur la page compilation.

' If Option Strict is on, this late binding
' causes a compile-time error. If Option Strict
' is off, the late binding instead causes a
' run-time error.
Dim punchCard As New Object
punchCard.Column = 5

Exemple 3

Les exemples suivants illustrent des erreurs causées par des variables déclarées avec un type implicite de Object. Cette catégorie d’erreurs correspond au type implicite ; condition supposée de l’objet sur la page compilation.

' If Option Strict is on and Option Infer is off,
' this Dim statement without an As clause 
' causes a compile-time error.
Dim cardReaders = 5

' If Option Strict is on, a compile-time error occurs.
' If Option Strict is off, the variable is set to Nothing.
Dim dryWall
' If Option Strict is on, this parameter without an
' As clause causes a compile-time error.
Private Sub DetectIntergalacticRange(ByVal photonAttenuation)

End Sub

Voir aussi