Partager via


Option Strict, instruction

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

Syntaxe

Option Strict { On | Off }

Pièces

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

Remarques

Quand Option Strict On ou Option Strict apparaît dans un fichier, les conditions suivantes provoquent une erreur au moment de la compilation :

  • Conversions restrictives implicites

  • Liaison tardive

  • Saisie implicite qui entraîne un Object type

Remarque

Dans les configurations d’avertissement que vous pouvez définir sur la page Compilation, Le Concepteur de projets (Visual Basic) contient trois paramètres qui correspondent aux trois conditions qui provoquent une erreur au moment de la 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 la vérification des erreurs et des avertissements pour les trois conditions, même si les paramètres IDE associés spécifient d’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 de types de données pour tous vos éléments de programmation est recommandée, pour les raisons suivantes :

  • Il permet l'assistance 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 de type 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 cette raison, 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 être amené à effectuer une conversion arrière et arrière entre Object d’autres types de données, ce qui réduit les performances.

Erreurs de conversion restrictive implicites

Les erreurs de conversion restrictive implicite se produisent lorsqu’il existe une conversion de type de données implicite qui 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 un 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 expliciteset conversions d’élargissement et de réduction.

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

Lorsque vous concatènez 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 elles sont activées Option Strict .

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 au moment de la compilation si Option Strict elle est activée. Vous pouvez éviter l’erreur au moment de la 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 s’il Option Strict est activé. Pour plus d’informations, consultez la section « Conversions étroites » dans For Each... Instruction suivante.

Erreurs de liaison tardive

Un objet est lié tardivement lorsqu’il est affecté à une propriété ou à une méthode d’une variable déclarée comme 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 lorsqu’un type approprié ne peut pas être déduit pour une variable déclarée. Par conséquent, un type est Object déduit. Cela se produit principalement lorsque vous utilisez une Dim instruction pour déclarer une variable sans utiliser de As clause et Option Infer est désactivée. Pour plus d’informations, consultez l’instruction Option Infer et la spécification du 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, ils doivent 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 Nothingsur , la variable a un type de Object. Aucune erreur au moment de la 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 et valeurs de données 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ésultat
Non Non Dim qty Si Option Strict elle est désactivée (valeur par défaut), la variable est définie sur Nothing.

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

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

Si Option Infer elle est désactivée et Option Strict est activée, une erreur au moment de la compilation se produit.
Oui Non Dim qty As Integer La variable est initialisée à la valeur par défaut pour le 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 n’est pas convertible en type de données spécifié, une erreur au moment de la compilation se produit.

Lorsqu’une instruction Option Strict n’est pas présente

Si le code source ne contient pas d’instruction Option Strict , le paramètre Option strict sur la page de compilation, le Concepteur de projets (Visual Basic) est utilisé. La page Compiler a 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 Option Strict dans l’IDE

Remarque

Votre ordinateur peut afficher différents noms ou emplacements pour certains des éléments de l’interface utilisateur Visual Studio dans les instructions suivantes. L’édition Visual Studio que vous avez et les paramètres que vous utilisez déterminent ces éléments. Pour plus d’informations, consultez Personnaliser l’IDE.

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

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

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

Lorsque vous utilisez la page Compile, Project Designer (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 de compilation contient des paramètres qui correspondent aux trois conditions qui provoquent une erreur au moment de la compilation.Option Strict Voici les paramètres suivants :

  • Conversion implicite

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

  • Type implicite ; objet supposé

Lorsque vous définissez Option Strict sur Activé, les trois de ces paramètres de configuration d’avertissement sont définis sur Erreur. Lorsque vous définissez Option Strict sur Désactivé, les trois paramètres sont définis sur Aucun.

Vous pouvez modifier individuellement chaque paramètre de configuration d’avertissement en 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éfinies 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 Option Strict par défaut 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 Vb Defaults. Le paramètre par défaut initial dans VB Defaults est Off.

Pour définir Option Strict sur la ligne de commande

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

Exemple 1

Les exemples suivants illustrent les erreurs au moment de la compilation provoqué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 de 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 au moment de la compilation provoqué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 de 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 provoqué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 de 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