Istruzione Option Strict
Limita le conversioni dei tipi di dati implicite solo alle conversioni verso un tipo di dati più grande, impedisce l'associazione tardiva e impedisce la tipizzazione implicita risultante in un tipo Object.
Option Strict { On | Off }
Parti
Termine |
Definizione |
On |
Parametro facoltativo. Abilita la verifica dell'istruzione Option Strict. |
Off |
Parametro facoltativo. Disabilita la verifica dell'istruzione Option Strict. |
Note
Quando Option Strict On o Option Strict appaiono in un file, le condizioni riportate di seguito generano un errore in fase di compilazione:
Conversioni di restrizione implicite
Associazione tardiva
Tipizzazione implicita che risulta in un tipo Object
Nota
Nelle configurazioni che è possibile impostare sul Pagina Compilazione, Progettazione progetti (Visual Basic), esistono tre impostazioni che corrispondono alle tre condizioni che generano un errore in fase di compilazione.Per ulteriori informazioni sulla creazione di tali impostazioni, vedere To set warning configurations in the 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 IDE associate specificano l'attivazione di tali errori o avvisi. L'istruzione di Option Strict On attiva errore e avviso che viene verificata la presenza di tutte e tre le condizioni, anche se le impostazioni associate IDE specificano disattivare tali errori o avvisi.
Se utilizzato, è necessario includere l'istruzione Option Strict in un file prima di tutte le altre istruzioni del codice.
Quando si Option Strict impostato su On, controlli di Visual Basic che i tipi di dati specificati per tutti gli elementi di programmazione. I tipi di dati possono essere specificati in modo esplicito, o essere specificati utilizzando l'inferenza del tipo di variabile locale. Specificando i tipi di dati per tutti gli elementi di programmazione è consigliabile, per i motivi seguenti:
Attiva il supporto IntelliSense per le variabili e i parametri, Ciò consente di visualizzarne le proprietà e gli altri membri mentre si digita il codice.
Consente al compilatore di eseguire la verifica dei tipi. Il controllo dei tipi consente di trovare istruzioni che possono non riuscire in fase di esecuzione a causa di errori di conversione del tipo. Vengono inoltre identificate le chiamate a metodi su oggetti che non li supportano.
Accelera l'esecuzione del codice. Una ragione è che se non si specifica un tipo di dati per un elemento di programmazione, il compilatore Visual Basic di assegnare il tipo di Object . Il codice compilato potrebbe essere necessario eseguire avanti e indietro tra Object e altri tipi di dati, con conseguente riduzione delle prestazioni.
Errori di conversione di restrizione implicita
Gli errori di conversione di restrizione implicita si verificano quando esiste una conversione di tipo di dati implicita che è una conversione di restrizione.
Visual Basic consente di convertire molti tipi di dati in altri tipi di dati. Se tuttavia un valore viene convertito da un tipo di dati a un altro caratterizzato da un livello di precisione o da una capacità inferiore, possono verificarsi perdite di dati. Se la conversione verso un tipo di dati più piccolo non riesce, si verifica un errore di runtime. Durante la compilazione, con l'istruzione Option Strict le conversioni di restrizione vengono notificate in modo che possano essere evitate. Per ulteriori informazioni, vedere Conversioni implicite ed esplicite (Visual Basic) e Conversioni di ampliamento e restrizione (Visual Basic).
Le conversioni che possono causare errori includono le conversioni implicite che si verificano nelle espressioni. Per ulteriori informazioni, vedere i seguenti argomenti:
Quando si concatenano le stringhe mediante Operatore & (Visual Basic), tutte le conversioni alle stringhe sono considerate conversioni verso un tipo di dati più grande. Tali conversioni pertanto non generano un errore di conversione implicito verso un tipo di dati più piccolo, anche se Option Strict è attivato.
Quando si chiama un metodo con un argomento che dispone di 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 è attivata. È possibile evitare questo errore in fase di compilazione utilizzando una conversione verso un tipo di dati più grande o una conversione esplicita.
Gli errori di conversione di restrizione implicita vengono eliminati durante la compilazione per le conversioni dagli elementi di una raccolta For Each…Next alla variabile di controllo del ciclo. Questo accade anche se Option Strict è attivata. Per ulteriori informazioni, vedere la sezione "Conversioni verso tipi di dati più piccoli" di Istruzione For Each...Next (Visual Basic).
Errori associazione tardiva
Oggetto è associato tardivamente quando è assegnato a una proprietà o a un metodo di una variabile dichiarata di tipo Object. Per ulteriori informazioni, vedere Associazione anticipata e tardiva (Visual Basic).
Errori del tipo di oggetti impliciti
Gli errori del tipo di oggetti impliciti si verificano quando non può essere derivato un tipo appropriato per una variabile dichiarata, in modo da derivare un tipo di Object. Ciò principalmente si verifica quando si utilizza un'istruzione Dim per dichiarare una variabile senza utilizzare una clausola As e Option Infer non è attivo. Per ulteriori informazioni, vedere Option Infer (istruzione) e Specifica del linguaggio Visual Basic.
Per i parametri del metodo, la clausola As è facoltativa se Option Strict è disattivata. Se, tuttavia, un parametro utilizza una clausola As, dovranno utilizzarla tutti i parametri. Se Option Strict è abilitata, la clausola As è obbligatoria per ogni definizione di parametro.
Se si dichiara una variabile senza utilizzare una clausola As e la si imposta su Nothing, la variabile dispone di un tipo di Object. Non si verifica nessun errore in fase di compilazione in questo caso, quando Option Strict è attivato e anche Option Infer. Un esempio è Dim something = Nothing.
Tipi di dati e valori predefiniti
Nella tabella seguente vengono descritti i risultati di varie combinazioni della specifica del tipo di dati e dell'inizializzatore in un'istruzione Istruzione Dim (Visual Basic).
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 |
Sì |
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 (Visual Basic). 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. |
Sì |
No |
Dim qty As Integer |
La variabile viene inizializzata sul valore predefinito per il tipo di dati. Per ulteriori informazioni, vedere Istruzione Dim (Visual Basic). |
Sì |
Sì |
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 nel codice sorgente non è presente un'istruzione Option Strict, si utilizza l'impostazione Option strict disponibile in Pagina Compilazione, Progettazione progetti (Visual Basic). La pagina Compila ha impostazioni che forniscono il controllo aggiuntivo sulle condizioni che generano un errore.
Se la compilazione viene eseguita tramite il compilatore della riga di comando, è possibile utilizzare 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 delle impostazioni di sviluppo in Visual Studio.
Selezionare un progetto in Esplora soluzioni. Scegliere Proprietà dal menu Progetto. Per ulteriori informazioni, vedere Introduzione a Progettazione progetti.
Nella scheda Compila, impostare il valore nella casella Option Strict.
Per impostare le configurazioni di avvisi nell'IDE
Quando si utilizza Pagina Compilazione, Progettazione progetti (Visual Basic) anziché un istruzione di Option Strict, si dispone di un'ulteriore controllo sulle condizioni che generano errori. La sezione Configurazioni avvisi della pagina Compilazione ha impostazioni che corrispondono alle tre condizioni che generano un errore in fase di compilazione quando Option Strict è attivata. Di seguito sono riportate queste impostazioni:
Conversione implicita
Associazione tardiva; la chiamata potrebbe avere esito negativo in fase di esecuzione
Tipo implicito: presunto oggetto
Quando si imposta Option Strict su On, le tre impostazioni di configurazione di avviso vengono impostate su Error. Quando si imposta Option Strict su Off, tutte e tre le impostazioni vengono impostate su None.
È possibile modificare singolarmente ogni impostazione di configurazione dell'avviso su None, Warning, o Error. Se tutte e tre le impostazioni di configurazione di avviso sono impostate su Errore, On verrà visualizzato nella casella Option strict. Se tutti e tre sono impostati su Nessuno, Off sarà visualizzato in questa casella. Per qualsiasi altra combinazione di queste impostazioni, (custom) è visualizzata.
Per impostare il valore predefinito di Option Strict per nuovi progetti
Quando si crea un progetto, l'impostazione Option Strict nella scheda Compila viene impostata con il valore dell'impostazione Option Strict della finestra di dialogo Opzioni.
Per impostare Option Strict in questa finestra di dialogo dal menu Strumenti, scegliere Opzioni. 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 l'istruzione Option Strict nella riga di comando
Includere l'opzione del compilatore /optionstrict nel comando vbc.
Esempio
Negli esempi seguenti vengono illustrati gli errori in fase di compilazione causati dalle conversioni dei tipi impliciti che sono conversioni verso un tipo di dati più piccolo. Questa categoria di errore 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
Nell'esempio riportato di seguito viene illustrato un errore in fase di compilazione causato dall'associazione tardiva. Questa categoria di errore corrisponde alla condizione di Associazione tardiva. La chiamata potrebbe non riuscire in fase di esecuzione. nella pagina 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
Negli esempi seguenti vengono illustrati gli errori causati dalle variabili che vengono dichiarate con un tipo implicito di Object. Questa categoria di errore corrisponde alla condizione di Tipo implicito: presunto oggetto nella pagina 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
Attività
Procedura: accedere ai membri di un oggetto (Visual Basic)
Riferimenti
Pagina Compilazione, Progettazione progetti (Visual Basic)
Istruzione Option Explicit (Visual Basic)
Funzioni di conversione del tipo (Visual Basic)
Impostazioni predefinite di Visual Basic, Progetti, finestra di dialogo Opzioni
Concetti
Conversioni di ampliamento e restrizione (Visual Basic)
Conversioni implicite ed esplicite (Visual Basic)
Espressioni incorporate in XML (Visual Basic)