Condividi tramite


Istruzione Option Strict

Limita le conversioni implicite dei tipi di dati solo a conversioni più ampliate, impedisce l'associazione tardiva e non consente la digitazione implicita che genera un Object tipo.

Sintassi

Option Strict { On | Off }

Parti

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

Osservazioni:

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

  • Conversioni implicite di restringimento

  • Associazione tardiva

  • Digitazione implicita che restituisce un Object tipo

Annotazioni

Nelle configurazioni di avviso che è possibile impostare nella pagina compilazione, Progettazione 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 Per 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 per 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 su Option StrictOn, 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 è che se non si specifica un tipo di dati per un elemento di programmazione, il compilatore di Visual Basic lo assegna al Object tipo. 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

Gli errori impliciti di conversione verso un tipo di dati ristretto si verificano quando è presente una conversione implicita del tipo di dati che è una conversione 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 esplicitee conversioni verso un tipo di dati più ampio e verso un tipo di dati più piccolo.

Le conversioni che possono causare errori includono conversioni implicite che si verificano nelle espressioni. Per altre informazioni, vedere 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 For Each…Next raccolta 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 For Each... Istruzione successiva.

Errori di associazione tardiva

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

Errori del tipo di oggetto implicito

Gli errori impliciti del tipo di oggetto si verificano quando non è possibile dedurre un tipo appropriato per una variabile dichiarata, pertanto viene dedotto un tipo di Object . Ciò si verifica principalmente quando si usa un'istruzione Dim per dichiarare una variabile senza usare una As clausola ed Option Infer è disattivata. Per altre informazioni, vedere Istruzione Option Infer e Specifica del linguaggio Visual Basic.

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

Se si dichiara una variabile senza usare una As clausola 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 questo è 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 un'istruzione Dim.

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

Se Option Strict è attivato, si verifica un errore in fase di compilazione.
NO Dim qty = 5 Se Option Infer è attivato (impostazione predefinita), la variabile accetta il tipo di dati dell'inizializzatore. Vedere Inferenza del tipo locale.

Se Option Infer è disattivato e Option Strict è disattivato, la variabile accetta il tipo di dati di Object.

Se Option Infer è disattivato ed Option Strict è attivo, 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'istruzioneOption Strict, viene utilizzata l'impostazione Option strict nella pagina Compila, verrà utilizzata La finestra di progettazione progetti (Visual Basic). La pagina 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

Annotazioni

Il computer potrebbe visualizzare nomi o percorsi diversi per alcuni degli elementi dell'interfaccia utente di Visual Studio nelle istruzioni seguenti. L'edizione di Visual Studio disponibile e le impostazioni usate 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 .On the Compile tab, set the value in the Option Strict box.

Per impostare le configurazioni di avviso nell'IDE

Quando si usa la pagina di compilazione, Progettazione progetti (Visual Basic) anziché un'istruzione Option Strict , si ha un controllo aggiuntivo sulle condizioni che generano errori. La sezione Configurazioni di avviso della pagina Compilazione include impostazioni che corrispondono alle tre condizioni che causano un errore in fase di compilazione quando Option Strict è attivo. Di seguito sono riportate le impostazioni seguenti:

  • Conversione implicita

  • Associazione tardiva; chiamata potrebbe non riuscire in fase di esecuzione

  • Tipo implicito; oggetto assunto

Quando si imposta Option Strict su , 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 sono impostate su Nessuno.

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

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

Quando si crea un progetto, l'impostazione Option Strict nella scheda Compila viene 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 VB. L'impostazione predefinita iniziale in Vb Defaults è 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 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

Gli esempi seguenti illustrano gli errori causati da variabili dichiarate con un tipo implicito di Object. Questa categoria di errori corrisponde al tipo implicito. La condizione presunta dell'oggetto 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

Vedere anche