Option Strict Statement

Limita le conversioni implicite dei tipi di dati solo all'ampliamento delle conversioni, non consente l'associazione tardiva e non consente la tipizzazione implicita che determina un Object tipo.

Sintassi

Option Strict { On | Off }

Parti

Termine Definizione
On facoltativo. Abilita Option Strict il controllo.
Off facoltativo. Disabilita il Option Strict controllo.

Commenti

Quando Option Strict On o viene visualizzato in un Option Strict file, le condizioni seguenti causano un errore in fase di compilazione:

  • Conversioni implicite verso un tipo di dati più piccolo

  • Associazione tardiva

  • Tipizzazione implicita che comporta un tipo Object

Nota

Nelle configurazioni di avviso che è possibile impostare nella pagina Compilazione Project Designer (Visual Basic)sono presenti tre impostazioni che corrispondono alle tre condizioni che causano un errore in fase di compilazione. Per informazioni su come usare queste impostazioni, vedere Per impostare configurazioni di avviso nell'IDE più avanti in questo argomento.

L'istruzione disattiva il controllo degli errori e degli avvisi per tutte e tre le condizioni, anche se le impostazioni IDE associate specificano di attivare Option Strict Off questi errori o avvisi. L'istruzione attiva il controllo degli errori e degli avvisi per tutte e tre le condizioni, anche se le impostazioni IDE associate specificano di Option Strict On disattivare questi errori o avvisi.

Se utilizzata, Option Strict l'istruzione deve essere visualizzata prima di qualsiasi altra istruzione di codice in un file.

Quando si imposta su , Visual Basic che i tipi di dati Option Strict siano specificati per tutti gli elementi di On programmazione. I tipi di dati possono essere specificati in modo esplicito o usando l'inferenza del tipo locale. È consigliabile specificare i tipi di dati per tutti gli elementi di programmazione, per i motivi seguenti:

  • Abilita il supporto IntelliSense per le variabili e i parametri. In questo modo è possibile visualizzare le relative proprietà e altri membri durante la digitazione del codice.

  • Consente al compilatore di eseguire il controllo dei tipi. Il controllo dei tipi consente di trovare istruzioni che possono avere esito negativo in fase di esecuzione a causa di errori di conversione dei tipi. Identifica anche le chiamate ai metodi su oggetti che non supportano tali metodi.

  • Accelera l'esecuzione del codice. Uno dei motivi è che se non si specifica un tipo di dati per un elemento di programmazione, il compilatore Visual Basic assegna il Object tipo. Il codice compilato potrebbe dover eseguire la conversione tra e altri tipi di Object dati, riducendo così le prestazioni.

Errori di conversione implicita verso un tipo di dati più ridotto

Questi errori si verificano in presenza di una conversione implicita verso un tipo di dati più piccolo.

Visual Basic possibile convertire molti tipi di dati in altri tipi di dati. La perdita di dati può verificarsi quando il valore di un tipo di dati viene convertito in un tipo di dati con minore precisione o capacità inferiore. Si verifica un errore di run-time se tale conversione verso un tipo di dati più grande ha esito negativo. Option Strict assicura la notifica in fase di compilazione di queste conversioni verso un tipo di dati più ridotto in modo che sia possibile evitarle. Per altre informazioni, vedere Conversioni implicite ed esplicite e Conversioni di tipo Widening e Narrowing.

Le conversioni che possono causare errori includono conversioni implicite che si verificano nelle espressioni. Per altre informazioni, vedere i seguenti argomenti:

Quando si concatenano stringhe usando l'operatore &, tutte le conversioni alle stringhe vengono considerate più ampie. Queste conversioni non generano quindi un errore di conversione implicita di tipo narrowing, anche se Option Strict è impostata su .

Quando si chiama un metodo con un argomento con un tipo di dati diverso dal parametro corrispondente, una conversione verso un tipo più ristretto genera un errore in fase di compilazione se Option Strict è on. È possibile evitare l'errore in fase di compilazione usando una conversione più ampia o una conversione esplicita.

Gli errori di conversione implicita verso un tipo di dati più grande vengono eliminati in fase di compilazione per le conversioni dagli elementi di una raccolta For Each…Next alla variabile di controllo del ciclo. Ciò si verifica anche se Option Strict è on. Per altre informazioni, vedere la sezione "Conversioni più restrittive" in For Each... Istruzione successiva.

Errori di associazione tardiva

Un oggetto è ad associazione tardiva quando viene assegnato a una proprietà o a un metodo di una variabile dichiarata di tipo Object. Per altre informazioni, vedere Associazione anticipata e tardiva.

Errori del tipo di oggetto implicito

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. Questo errore si verifica principalmente quando si usa un'istruzione Dim per dichiarare una variabile senza usare una clausola As e Option Infer è Off. Per altre informazioni, vedere Istruzione Option Infer e Visual Basic Language Specification.

Per i parametri del metodo, As la clausola è facoltativa se Option Strict è disattivata. Tuttavia, se un parametro usa una As clausola , tutti devono usarlo. Se Option Strict è on, la As clausola è obbligatoria per ogni definizione di parametro.

Se si dichiara una variabile senza usare una clausola e la si imposta su , la As variabile ha un tipo Nothing Object . In questo caso non si verifica alcun errore in fase di compilazione quando Option Strict è on e è Option Infer on. Un esempio è Dim something = Nothing .

Tipi di dati e valori predefiniti

Nella tabella seguente vengono descritti i risultati di varie combinazioni di specifica del tipo di dati e dell'inizializzatore in un'istruzione Dim.

Tipo di dati specificato? Inizializzatore specificato? Esempio Risultato
No No Dim qty Se Option Strict è disabilitato (impostazione predefinita), la variabile è impostata su Nothing.

Se Option Strict è abilitato, si verifica un errore in fase di compilazione.
No Dim qty = 5 Se Option Infer è abilitato (impostazione predefinita), alla variabile viene assegnato il tipo di dati dell'inizializzatore. Vedere Inferenza del tipo locale.

Se le istruzioni Option Infer e Option Strict sono disabilitate, il tipo di dati accettato dalla variabile è Object.

Se Option Infer è disabilitato e Option Strict è abilitato, si verifica un errore in fase di compilazione.
No Dim qty As Integer La variabile viene inizializzata sul valore predefinito per il tipo di dati. Per altre informazioni, vedere Istruzione Dim.
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.

Quando un'istruzione Option Strict non è presente

Se il codice sorgente non contiene un'istruzione , viene usata l'impostazione Option strict nella pagina Compila Option Strict Project Designer (Visual Basic). La pagina Compila include impostazioni che forniscono un controllo aggiuntivo sulle condizioni che generano un errore.

Se si usa il compilatore da riga di comando, è possibile usare l'opzione del compilatore -optionstrict per specificare un'impostazione per Option Strict .

Per impostare Option Strict nell'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. La versione di Visual Studio in uso e le impostazioni configurate determinano questi elementi. Per altre informazioni, vedere Personalizzazione dell'IDE.

  1. In Esplora soluzioni selezionare un progetto. Scegliere Proprietà dal menu Progetto.

  2. Nella scheda Compila impostare il valore nella casella Option Strict .

Per impostare le configurazioni degli avvisi nell'IDE

Quando si usa la pagina Compila, Project Designer (Visual Basic) anziché un'istruzione , si ha un controllo aggiuntivo sulle condizioni che Option Strict generano errori. Nella sezione Configurazioni avviso della pagina Compila sono disponibili impostazioni che corrispondono alle tre condizioni che causano un errore in fase di compilazione quando Option Strict è on. Queste impostazioni sono le seguenti:

  • Conversione implicita

  • Binding tardivo. La chiamata potrebbe non riuscire in fase di esecuzione.

  • Tipo implicito. Verrà utilizzato oggetto.

Quando si imposta Option Strict su On, tutte e tre queste impostazioni di configurazione degli avvisi vengono impostate su Errore. Quando si imposta Option Strict su Off, tutte e tre le impostazioni vengono impostate su Nessuno.

È possibile modificare singolarmente ogni impostazione di configurazione degli avvisi su Nessuno, Avviso o Errore. Se tutte e tre le impostazioni di configurazione degli avvisi sono impostate su Errore, viene visualizzato nella On casella Option strict . Se tutti e tre sono impostati su Nessuno, Off viene visualizzato in questa casella. Per qualsiasi altra combinazione di queste impostazioni, viene visualizzato (personalizzato).

Per impostare l'impostazione predefinita Option Strict per i nuovi progetti

Quando si crea un progetto, l'impostazione Option Strict nella scheda Compila è impostata sull'impostazione Option Strict nella finestra di dialogo Opzioni .

Per impostare Option Strict questa finestra di dialogo, scegliere Opzioni dal menu Strumenti. Nella finestra di dialogo Opzioni espandere Progetti e soluzioni, quindi fare clic su Impostazioni predefinite di Visual Basic. L'impostazione predefinita iniziale in VB predefinite è Off .

Per impostare Option Strict nella riga di comando

Includere l'opzione del compilatore -optionstrict nel comando vbc.

Esempio 1

Gli esempi seguenti illustrano gli errori in fase di compilazione causati da conversioni di tipi implicite che sono conversioni verso un tipo più ristretto. Questa categoria di errori corrisponde alla condizione di conversione implicita nella pagina Di compilazione.

' 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

Esempio 2

Nell'esempio seguente viene illustrato un errore in fase di compilazione causato dall'associazione tardiva. Questa categoria di errori corrisponde all'associazione tardiva. La chiamata potrebbe non riuscire in fase di esecuzione nella pagina di compilazione.

' 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

Esempio 3

Negli esempi seguenti vengono illustrati gli errori causati da variabili dichiarate con un tipo implicito di Object . Questa categoria di errori corrisponde alla condizione Implicit type; object assumed condition nella pagina 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

Vedi anche