Istruzione Option Strict

Limita le conversioni implicite di tipi di dati solo alle conversioni verso tipi di dati più grandi, non consente l'associazione tardiva né la tipizzazione implicita che genera un tipo Object.

Sintassi

Option Strict { On | Off }

Parti

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

Osservazioni:

Quando in un file viene visualizzato Option Strict On o Option Strict, le condizioni seguenti generano 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 di compilazione, Creazione progetti (Visual Basic), sono disponibili tre impostazioni corrispondenti alle tre condizioni che causano un errore in fase di compilazione. Per informazioni su come usare queste impostazioni, vedere Impostare le configurazioni di avviso nell'IDE più avanti in questo argomento.

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

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

Quando si imposta Option Strict su On, Visual Basic controlla che i tipi di dati siano specificati per tutti gli elementi di programmazione. I tipi di dati possono essere specificati in modo esplicito o specificati 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 di 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 inoltre le chiamate ai metodi sugli oggetti che non supportano tali metodi.

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

Errori di conversione con restringimento implicito

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

Visual Basic può 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 una minore precisione o una capacità inferiore. Si verifica un errore di run-time se una conversione di tipo narrowing ha esito negativo. Option Strict garantisce la notifica in fase di compilazione di queste conversioni di restringimento in modo che sia possibile evitarle. Per altre informazioni, vedere conversioni implicite ed esplicite e conversioni verso un tipo di dati più esteso e verso un tipo di dati più piccolo.

Le conversioni che possono causare errori includono conversioni implicite che si verificano nelle espressioni. Per ulteriori informazioni, vedi gli argomenti seguenti:

Quando si concatenano stringhe usando l'operatore&, tutte le conversioni nelle stringhe vengono considerate di tipo widening. Pertanto, queste conversioni non generano un errore di conversione con restringimento implicito, anche se Option Strict è attivo.

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

Gli errori di conversione con restringimento implicito 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 è attivo. Per altre informazioni, vedere la sezione "Conversioni di tipo narrowing" in Istruzione For Each...Next.

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 Specifiche del linguaggio di Visual Basic.

Per i parametri del metodo, la clausola As è facoltativa se Option Strict è disattivato. Tuttavia, se uno dei parametri usa una clausola As, devono usarla tutti. Se Option Strict è attivo, è necessaria la clausola As per ogni definizione di parametro.

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

Tipi di dati e valori predefiniti

Nella tabella seguente vengono descritti i risultati di varie combinazioni di specificare il tipo di dati e l'inizializzatore in una 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 di variabile 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 non è presente un'istruzione Option Strict

Se il codice sorgente non contiene un'istruzione Option Strict, viene utilizzata l'impostazione Option strict nella Pagina di compilazione, Creazione progetti (Visual Basic). La Pagina di Compilazione include impostazioni che forniscono un controllo aggiuntivo sulle condizioni che generano un errore.

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

Per impostare Option Strict nell'IDE

Nota

I nomi o i 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. Selezionare un progetto in Esplora soluzioni. Scegliere Proprietà dal menu Progetto.

  2. Nella scheda Compila impostare il valore nella casella option strict.

Per impostare le configurazioni di avviso nell'IDE

Quando si usa la Pagina di compilazione, Creazione progetti (Visual Basic) anziché un'istruzione Option Strict, si ha un controllo aggiuntivo sulle condizioni che generano errori. La sezione Configurazioni avvisi della pagina Compilazione include impostazioni corrispondenti 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 vengono impostate su Errore, nella casella Option strict viene visualizzato On. Se tutte e tre sono impostate su Nessuno, nella casella viene visualizzato Off. Per qualsiasi altra combinazione di queste impostazioni, viene visualizzato (personalizzato).

Impostare l'impostazione predefinita Option Strict per i nuovi progetti

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

Per impostare Option Strict in 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 Impostazioni predefinite di Visual Basic è Off.

Per impostare Option Strict nella riga di comando

Includere l'opzione del compilatore optionstrict nel comando vbc.

Esempio 1

Negli esempi seguenti vengono illustrati gli errori in fase di compilazione causati da conversioni di tipi implicite che stanno restringendo le conversioni. 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 alla condizione 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

Gli esempi seguenti illustrano gli errori causati da variabili dichiarate con un tipo implicito di Object. Questa categoria di errori corrisponde alla condizione tipo implicito; oggetto assunto nella pagina di compilazione.

' 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