Option Strict StatementOption Strict Statement

Limita le conversioni implicite dei tipi di dati solo per le conversioni verso un tipo di dati più ampio, non consente l'associazione tardiva e impedisce la tipizzazione implicita che restituisce un tipo di Object.Restricts implicit data type conversions to only widening conversions, disallows late binding, and disallows implicit typing that results in an Object type.

SintassiSyntax

Option Strict { On | Off }  

PartiParts

TermineTerm DefinizioneDefinition
On Facoltativa.Optional. Abilita il controllo Option Strict.Enables Option Strict checking.
Off Facoltativa.Optional. Disabilita il controllo Option Strict.Disables Option Strict checking.

NoteRemarks

Quando Option Strict On o Option Strict viene visualizzato in un file, le condizioni seguenti generano un errore in fase di compilazione:When Option Strict On or Option Strict appears in a file, the following conditions cause a compile-time error:

  • Conversioni implicite verso un tipo di dati più piccoloImplicit narrowing conversions

  • Associazione tardivaLate binding

  • Tipizzazione implicita che comporta un tipo ObjectImplicit typing that results in an Object type

Nota

Nelle configurazioni di avviso che è possibile impostare nella pagina compilazione, Progettazione progetti (Visual Basic), sono disponibili tre impostazioni che corrispondono alle tre condizioni che provocano un errore in fase di compilazione.In the warning configurations that you can set on the Compile Page, Project Designer (Visual Basic), there are three settings that correspond to the three conditions that cause a compile-time error. Per informazioni sull'utilizzo di queste impostazioni, vedere per impostare le configurazioni di avviso nell'IDE più avanti in questo argomento.For information about how to use these settings, see To set warning configurations in the IDE later in this topic.

L'istruzione Option Strict Off disattiva il controllo degli errori e degli avvisi per tutte e tre le condizioni, anche se le impostazioni IDE associate specificano di attivare questi errori o avvisi.The Option Strict Off statement turns off error and warning checking for all three conditions, even if the associated IDE settings specify to turn on these errors or warnings. L'istruzione Option Strict On attiva il controllo degli errori e degli avvisi per tutte e tre le condizioni, anche se le impostazioni IDE associate specificano di disattivare questi errori o avvisi.The Option Strict On statement turns on error and warning checking for all three conditions, even if the associated IDE settings specify to turn off these errors or warnings.

Se utilizzata, l'istruzione Option Strict deve essere visualizzata prima di qualsiasi altra istruzione di codice in un file.If used, the Option Strict statement must appear before any other code statements in a file.

Quando si imposta Option Strict su On, Visual Basic verifica che i tipi di dati siano specificati per tutti gli elementi di programmazione.When you set Option Strict to On, Visual Basic checks that data types are specified for all programming elements. I tipi di dati possono essere specificati in modo esplicito o specificati tramite l'inferenza del tipo locale.Data types can be specified explicitly, or specified by using local type inference. È consigliabile specificare i tipi di dati per tutti gli elementi di programmazione, per i motivi seguenti:Specifying data types for all your programming elements is recommended, for the following reasons:

  • Abilita il supporto IntelliSense per le variabili e i parametri.It enables IntelliSense support for your variables and parameters. Questo consente di visualizzare le relative proprietà e altri membri durante la digitazione del codice.This enables you to see their properties and other members as you type code.

  • Consente al compilatore di eseguire il controllo dei tipi.It enables the compiler to perform type checking. Il controllo dei tipi consente di trovare istruzioni che possono avere esito negativo in fase di esecuzione a causa di errori di conversione del tipo.Type checking helps you find statements that can fail at run time because of type conversion errors. Identifica inoltre le chiamate ai metodi su oggetti che non supportano tali metodi.It also identifies calls to methods on objects that do not support those methods.

  • Accelera l'esecuzione del codice.It speeds up the execution of code. Un motivo è che se non si specifica un tipo di dati per un elemento di programmazione, il compilatore Visual Basic lo assegna al tipo di Object.One reason for this is that if you do not specify a data type for a programming element, the Visual Basic compiler assigns it the Object type. Il codice compilato potrebbe dover eseguire la conversione tra Object e altri tipi di dati, riducendo così le prestazioni.Compiled code might have to convert back and forth between Object and other data types, which reduces performance.

Errori di conversione implicita verso un tipo di restringimentoImplicit Narrowing Conversion Errors

Questi errori si verificano in presenza di una conversione implicita verso un tipo di dati più piccolo.Implicit narrowing conversion errors occur when there is an implicit data type conversion that is a narrowing conversion.

Visual Basic possibile convertire molti tipi di dati in altri tipi di dati.Visual Basic can convert many data types to other data types. È possibile che si verifichi una perdita di dati quando il valore di un tipo di dati viene convertito in un tipo di dati con una precisione minore o con una capacità minore.Data loss can occur when the value of one data type is converted to a data type that has less precision or a smaller capacity. Si verifica un errore di run-time se tale conversione non riesce.A run-time error occurs if such a narrowing conversion fails. Option Strict garantisce la notifica in fase di compilazione di queste conversioni verso un tipo di caratteri più piccolo, in modo che sia possibile evitarle.Option Strict ensures compile-time notification of these narrowing conversions so that you can avoid them. Per altre informazioni, vedere conversioni implicite ed esplicite e conversioni verso un tipo di dati più piccolo e più ampio.For more information, see Implicit and Explicit Conversions and Widening and Narrowing Conversions.

Le conversioni che possono causare errori includono conversioni implicite che si verificano nelle espressioni.Conversions that can cause errors include implicit conversions that occur in expressions. Per altre informazioni, vedere gli argomenti seguenti:For more information, see the following topics:

Quando si concatenano stringhe usando l' operatore &, tutte le conversioni alle stringhe vengono considerate più estese.When you concatenate strings by using the & Operator, all conversions to the strings are considered to be widening. Pertanto, queste conversioni non generano un errore di conversione implicita verso un tipo di restringimento implicito, anche se Option Strict è on.So these conversions do not generate an implicit narrowing conversion error, even if Option Strict is on.

Quando si chiama un metodo con un argomento con un tipo di dati diverso dal parametro corrispondente, una conversione verso un tipo di dati più piccolo causa un errore in fase di compilazione se Option Strict è on.When you call a method that has an argument that has a data type different from the corresponding parameter, a narrowing conversion causes a compile-time error if Option Strict is on. È possibile evitare l'errore in fase di compilazione utilizzando una conversione verso un tipo di oggetto più ampio o una conversione esplicita.You can avoid the compile-time error by using a widening conversion or an explicit conversion.

Gli errori di conversione di tipo restringimento implicito vengono eliminati in fase di compilazione per le conversioni dagli elementi di una raccolta di For Each…Next alla variabile di controllo del ciclo.Implicit narrowing conversion errors are suppressed at compile-time for conversions from the elements in a For Each…Next collection to the loop control variable. Ciò si verifica anche se Option Strict è on.This occurs even if Option Strict is on. Per ulteriori informazioni, vedere la sezione relativa alle conversioni verso un tipo di dati più piccolo in per ciascuna... Istruzione successiva.For more information, see the "Narrowing Conversions" section in For Each...Next Statement.

Errori di associazione tardivaLate Binding Errors

Un oggetto è ad associazione tardiva quando viene assegnato a una proprietà o a un metodo di una variabile dichiarata di tipo Object.An object is late bound when it is assigned to a property or method of a variable that is declared to be of type Object. Per ulteriori informazioni, vedere associazione anticipata e tardiva.For more information, see Early and Late Binding.

Errori di tipo di oggetto implicitoImplicit Object Type Errors

Si verificano errori di tipo di oggetto implicito quando non è possibile dedurre un tipo appropriato per una variabile dichiarata, pertanto viene dedotto il tipo Object.Implicit object type errors occur when an appropriate type cannot be inferred for a declared variable, so a type of Object is inferred. Questo errore si verifica principalmente quando si usa un'istruzione Dim per dichiarare una variabile senza usare una clausola As e Option Infer è Off.This primarily occurs when you use a Dim statement to declare a variable without using an As clause, and Option Infer is off. Per ulteriori informazioni, vedere l' istruzione Option deduce e la specifica del linguaggio Visual Basic.For more information, see Option Infer Statement and the Visual Basic Language Specification.

Per i parametri del metodo, la clausola As è facoltativa se Option Strict è disattivato.For method parameters, the As clause is optional if Option Strict is off. Tuttavia, se uno dei parametri usa una clausola As, è necessario utilizzarli tutti.However, if any one parameter uses an As clause, they all must use it. Se Option Strict è on, la clausola As è obbligatoria per ogni definizione di parametro.If Option Strict is on, the As clause is required for every parameter definition.

Se si dichiara una variabile senza usare una clausola As e la si imposta su Nothing, la variabile ha un tipo di Object.If you declare a variable without using an As clause and set it to Nothing, the variable has a type of Object. In questo caso non si verifica alcun errore in fase di compilazione quando Option Strict è on e Option Infer è on.No compile-time error occurs in this case when Option Strict is on and Option Infer is on. Un esempio è Dim something = Nothing.An example of this is Dim something = Nothing.

Tipi di dati e valori predefinitiDefault Data Types and Values

Nella tabella seguente vengono descritti i risultati di diverse combinazioni di specifica del tipo di dati e dell'inizializzatore in un' istruzione Dim.The following table describes the results of various combinations of specifying the data type and initializer in a Dim Statement.

Tipo di dati specificato?Data type specified? Inizializzatore specificato?Initializer specified? EsempioExample RisultatoResult
NoNo NoNo Dim qty Se Option Strict è disabilitato (impostazione predefinita), la variabile è impostata su Nothing.If Option Strict is off (the default), the variable is set to Nothing.

Se Option Strict è abilitato, si verifica un errore in fase di compilazione.If Option Strict is on, a compile-time error occurs.
NoNo Yes Dim qty = 5 Se Option Infer è abilitato (impostazione predefinita), alla variabile viene assegnato il tipo di dati dell'inizializzatore.If Option Infer is on (the default), the variable takes the data type of the initializer. Vedere inferenza del tipo locale.See Local Type Inference.

Se le istruzioni Option Infer e Option Strict sono disabilitate, il tipo di dati accettato dalla variabile è Object.If Option Infer is off and Option Strict is off, the variable takes the data type of Object.

Se Option Infer è disabilitato e Option Strict è abilitato, si verifica un errore in fase di compilazione.If Option Infer is off and Option Strict is on, a compile-time error occurs.
Yes NoNo Dim qty As Integer La variabile viene inizializzata sul valore predefinito per il tipo di dati.The variable is initialized to the default value for the data type. Per ulteriori informazioni, vedere istruzione Dim.For more information, see Dim Statement.
Yes Yes Dim qty As Integer = 5 Se il tipo di dati dell'inizializzatore non è convertibile nel tipo di dati specificato, si verifica un errore in fase di compilazione.If the data type of the initializer is not convertible to the specified data type, a compile-time error occurs.

Quando non è presente un'istruzione Option StrictWhen an Option Strict Statement Is Not Present

Se il codice sorgente non contiene un'istruzione Option Strict, viene utilizzata l'impostazione Option Strict nella pagina compilazione, progettazione progetti (Visual Basic) .If the source code does not contain an Option Strict statement, the Option strict setting on the Compile Page, Project Designer (Visual Basic) is used. Nella pagina Compila sono disponibili impostazioni che consentono di controllare ulteriormente le condizioni che generano un errore.The Compile Page has settings that provide additional control over the conditions that generate an error.

Se si usa il compilatore da riga di comando, è possibile usare l'opzione del compilatore -OptionStrict ( per specificare un'impostazione per Option Strict.If you are using the command-line compiler, you can use the -optionstrict compiler option to specify a setting for Option Strict.

Per impostare Option Strict nell'IDETo set Option Strict in the IDE

Nota

Nomi o percorsi visualizzati per alcuni elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti potrebbero essere diversi nel computer in uso.Your computer might show different names or locations for some of the Visual Studio user interface elements in the following instructions. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi.The Visual Studio edition that you have and the settings that you use determine these elements. Per altre informazioni, vedere Personalizzazione dell'IDE.For more information, see Personalizing the IDE.

  1. Selezionare un progetto in Esplora soluzioni.In Solution Explorer, select a project. Scegliere Proprietà dal menu Progetto.On the Project menu, click Properties.

  2. Nella scheda Compila , impostare il valore nella casella Option Strict .On the Compile tab, set the value in the Option Strict box.

Per impostare le configurazioni di avviso nell'IDETo set warning configurations in the IDE

Quando si utilizza la pagina Compila, Progettazione progetti (Visual Basic) invece di un'istruzione Option Strict, è possibile controllare ulteriormente le condizioni che generano errori.When you use the Compile Page, Project Designer (Visual Basic) instead of an Option Strict statement, you have additional control over the conditions that generate errors. Nella sezione configurazioni avviso della pagina Compila sono presenti impostazioni che corrispondono alle tre condizioni che generano un errore in fase di compilazione quando Option Strict è impostata su on.The Warning configurations section of the Compile Page has settings that correspond to the three conditions that cause a compile-time error when Option Strict is on. Queste impostazioni sono le seguenti:Following are these settings:

  • Conversione implicitaImplicit conversion

  • Binding tardivo. La chiamata potrebbe non riuscire in fase di esecuzione.Late binding; call could fail at run time

  • Tipo implicito. Verrà utilizzato oggetto.Implicit type; object assumed

Quando si imposta Option Strict su On, tutte e tre queste impostazioni di configurazione degli avvisi vengono impostate su Errore.When you set Option Strict to On, all three of these warning configuration settings are set to Error. Quando si imposta Option Strict su Off, tutte e tre le impostazioni vengono impostate su Nessuno.When you set Option Strict to Off, all three settings are set to None.

È possibile modificare singolarmente ogni impostazione di configurazione degli avvisi su Nessuno, Avviso o Errore.You can individually change each warning configuration setting to None, Warning, or Error. Se tutte e tre le impostazioni di configurazione degli avvisi vengono impostate su Errore, nella casella On viene visualizzato Option strict.If all three warning configuration settings are set to Error, On appears in the Option strict box. Se tutte e tre sono impostate su Nessuno, nella casella viene visualizzato Off.If all three are set to None, Off appears in this box. Per qualsiasi altra combinazione di queste impostazioni, viene visualizzato (personalizzato) .For any other combination of these settings, (custom) appears.

Per impostare l'impostazione predefinita Option Strict per i nuovi progettiTo set the Option Strict default setting for new projects

Quando si crea un progetto, l'impostazione Option Strict nella scheda Compila viene impostata sull'impostazione Option Strict nella finestra di dialogo Opzioni .When you create a project, the Option Strict setting on the Compile tab is set to the Option Strict setting in the Options dialog box.

Per impostare Option Strict in questa finestra di dialogo, scegliere Opzionidal menu strumenti .To set Option Strict in this dialog box, on the Tools menu, click Options. Nella finestra di dialogo Opzioni espandere Progetti e soluzioni, quindi fare clic su Impostazioni predefinite di Visual Basic.In the Options dialog box, expand Projects and Solutions, and then click VB Defaults. L'impostazione predefinita iniziale in impostazioni predefinite di Visual Basic è Off.The initial default setting in VB Defaults is Off.

Per impostare Option Strict nella riga di comandoTo set Option Strict on the command line

Includere l'opzione del compilatore -OptionStrict ( nel comando vbc .Include the -optionstrict compiler option in the vbc command.

EsempioExample

Negli esempi seguenti vengono illustrati gli errori in fase di compilazione causati da conversioni di tipi implicite che sono conversioni verso un tipo di testo più piccolo.The following examples demonstrate compile-time errors caused by implicit type conversions that are narrowing conversions. Questa categoria di errori corrisponde alla condizione di conversione implicita nella pagina Compila.This category of errors corresponds to the Implicit conversion condition on the Compile Page.

' 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

EsempioExample

Nell'esempio seguente viene illustrato un errore in fase di compilazione causato dall'associazione tardiva.The following example demonstrates a compile-time error caused by late binding. Questa categoria di errori corrisponde all' associazione tardiva; la chiamata potrebbe non riuscire in fase di esecuzione nella pagina Compila.This category of errors corresponds to the Late binding; call could fail at run time condition on the Compile Page.

' 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

EsempioExample

Negli esempi seguenti vengono illustrati gli errori causati da variabili dichiarate con un tipo implicito di Object.The following examples demonstrate errors caused by variables that are declared with an implicit type of Object. Questa categoria di errori corrisponde al tipo implicito . la condizione presuppone l'oggetto nella pagina di compilazione.This category of errors corresponds to the Implicit type; object assumed condition on the Compile Page.

' 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

Vedere ancheSee also