Partage via


Option Strict Statement

Limite les conversions des types de données implicites aux seules conversions étendues, interdit les liaisons tardives et interdit pas le typage implicite qui aboutit à un type Object.

Syntaxe

Option Strict { On | Off }

Éléments

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

Notes

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 génère un type Object

Notes

Dans les configurations d’avertissement que vous pouvez définir sur la Page Compilation, Concepteur de projets (Visual Basic), il y a 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 source dans un fichier.

Lorsque vous définissez Option Strict sur On, 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 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 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 type Object. Le code compilé peut être amené à effectuer une conversion entre Object et 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 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. Une perte de données peut se produire lorsque la valeur d’un type de données est convertie en un type de données ayant une précision moindre ou une capacité réduite. 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 restrictives.

Les conversions pouvant 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énez des chaînes à l’aide de & l’opérateur, toutes les conversions vers les chaînes sont considérées comme étendues. Par conséquent, ces conversions ne génèrent pas d’erreur de conversion restrictive implicite, même si Option Strict est activée.

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 restrictive provoque une erreur au moment de la compilation si Option Strict est activé. 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 collection For Each…Next vers la variable de contrôle de boucle. Cela se produit même si Option Strict est activé. Pour plus d’informations, consultez la section « Conversions étroites » dans Instruction For Each...Next.

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 liaison 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 Instruction Option Strict et la Spécification du langage Visual Basic.

Pour les paramètres de méthode, la clause As est facultative si Option Strict est désactivé. Toutefois, si un paramètre utilise une clause As , ils doivent tous l’utiliser. Si Option Strict est activé, la clause As est requise pour chaque définition de paramètre.

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

Types de données et valeurs par défaut

Le tableau suivant décrit les résultats des diverses combinaisons de spécification du type de données et d'un 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 Inférence de type de variable locale.

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 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 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 Compile, concepteur de projets (Visual Basic) est utilisé. La page Compile 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 compilateur -optionstrict pour spécifier un paramètre pour Option Strict.

Pour définir 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 l’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 instruction Option Strict, vous avez un contrôle supplémentaire sur les conditions qui génèrent des erreurs. La section Configurations des avertissements de la page Compile contient des paramètres qui correspondent aux trois conditions qui provoquent une erreur de compilation quand Option Strict est activé. 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 ont la valeur Erreur, On s’affiche dans la zone Option strict. Si les trois ont la valeur Aucun, 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

Quand vous créez un projet, le paramètre Option Strict de l’onglet Compile prend la valeur du 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. La définition par défaut initiale de Valeurs par défaut VB 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 Compile.

' 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 Compile.

' 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 à la condition Type implicite; objet supposé sur la page Compile.

' 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