Option Strict Statement
Restringe las conversiones de tipos de datos implícitos solo a conversiones de ampliación, no permite el enlace en tiempo de ejecución y no permite tipos implícitos que dan como resultado un tipo Object
.
Sintaxis
Option Strict { On | Off }
Partes
Término | Definición |
---|---|
On |
Opcional. Habilita la comprobación de Option Strict . |
Off |
Opcional. Deshabilita la comprobación de Option Strict . |
Comentarios
Si aparece Option Strict On
o Option Strict
en un archivo, las condiciones siguientes provocan un error en tiempo de compilación:
Conversiones de restricción implícitas
Enlace en tiempo de ejecución
Tipos implícitos que dan como resultado un tipo
Object
Nota
En las configuraciones de advertencia que puede establecer en Página Compilación, Diseñador de proyectos (Visual Basic) hay tres valores que corresponden a las tres condiciones que provocan un error en tiempo de compilación. Para más información sobre cómo usar esta configuración, consulte Establecimiento de configuraciones de advertencia en el IDE más adelante en este tema.
La instrucción Option Strict Off
desactiva la comprobación de errores y advertencias de las tres condiciones, incluso si la configuración del IDE asociada especifica que se deben activar estos errores o advertencias. La instrucción Option Strict On
activa la comprobación de errores y advertencias de las tres condiciones, incluso si la configuración del IDE asociada especifica que se deben desactivar estos errores o advertencias.
Si se utiliza, la instrucción Option Strict
debe aparecer en el archivo antes que cualquier otra instrucción de código.
Cuando se establece Option Strict
en On
, Visual Basic comprueba que se especifiquen los tipos de datos de todos los elementos de programación. Los tipos de datos se pueden especificar explícitamente o especificar mediante la inferencia de tipo de variable local. Se recomienda especificar los tipos de datos de todos los elementos de programación por los siguientes motivos:
Habilita la compatibilidad de IntelliSense con las variables y parámetros. Esto le permite ver sus propiedades y otros miembros mientras escribe en el código.
Permite al compilador realizar la comprobación de tipos. La comprobación de tipos le ayuda a encontrar instrucciones que pueden producir errores en tiempo de ejecución debido a errores de conversión de tipos. También identifica llamadas a métodos en objetos que no admiten esos métodos.
Acelera la ejecución del código. Un motivo de esto es que si no especifica un tipo de datos de un elemento de programación, el compilador de Visual Basic lo asignará al tipo
Object
. Es posible que el código compilado tenga que convertir entreObject
y otros tipos de datos una y otra vez, lo que reduce el rendimiento.
Errores de conversión de restricción implícita
Los errores de conversión de restricción implícita se producen cuando existe una conversión de tipos de datos implícita que es una conversión de restricción.
Visual Basic puede convertir muchos tipos de datos a otros tipos de datos. Pueden perderse datos si el valor de un tipo de datos se convierte en un tipo de datos que tenga menor precisión o menor capacidad. Se producirá un error en tiempo de ejecución si surge un error de conversión de restricción de este tipo. Option Strict
garantiza la notificación en tiempo de compilación de estas conversiones de restricción para que pueda evitarlas. Para más información, consulte Conversiones implícitas y explícitas y Conversiones de ampliación y de restricción.
Las conversiones que pueden causar errores incluyen conversiones implícitas que se producen en expresiones. Para obtener más información, vea los temas siguientes:
Cuando concatena cadenas utilizando el operador &, todas las conversiones a las cadenas se consideran ensanchamientos. Por lo tanto, estas conversiones no generan un error de conversión de restricción implícita, incluso si Option Strict
está activado.
Cuando se llama a un método que tiene un argumento con un tipo de datos distinto del parámetro correspondiente, una conversión de restricción provocará un error en tiempo de compilación si Option Strict
está activado. Puede evitar el error en tiempo de compilación mediante una conversión de ampliación o una conversión explícita.
Los errores de conversión de restricción implícita se suprimen en tiempo de compilación para las conversiones de los elementos de una colección For Each…Next
en la variable de control de bucle. Esto ocurre incluso si la instrucción Option Strict
está activada. Para más información, consulte la sección "Conversiones de restricción" de Instrucción For Each...Next.
Errores de enlace en tiempo de ejecución
Un objeto se enlaza en tiempo de ejecución cuando se asigna a una propiedad o un método de una variable que se declara como variable de tipo Object
. Para más información, consulte Enlace en tiempo de compilación y en tiempo de ejecución.
Errores de tipo de objeto implícito
Los errores de tipo de objeto implícito se producen cuando no se puede inferir un tipo adecuado para una variable declarada, por lo que se infiere un tipo de Object
. Esto se produce principalmente cuando se usa una instrucción Dim
para declarar una variable sin usar una cláusula As
y Option Infer
está desactivado. Para más información, consulte Instrucción Option Infer y la Especificación del lenguaje de Visual Basic.
En el caso de los parámetros de método, la cláusula As
es opcional si la instrucción Option Strict
está desactivada. Sin embargo, si algún parámetro usa una cláusula As
, todos deben usarla. Si Option Strict
está activada, la cláusula As
es obligatoria para cada definición de parámetro.
Si declara una variable sin usar una cláusula As
y la establece en Nothing
, la variable tiene un tipo de Object
. No se produce ningún error en tiempo de compilación en este caso cuando Option Strict
y Option Infer
están activadas. Un ejemplo sería: Dim something = Nothing
.
Tipos de datos y valores predeterminados
En la tabla siguiente se describen los resultados de diversas combinaciones resultantes de especificar el tipo de datos y el inicializador en una instrucción Dim.
¿Tipo de datos especificado? | ¿Inicializador especificado? | Ejemplo | Resultado |
---|---|---|---|
No | No | Dim qty |
Si Option Strict está desactivado (valor predeterminado), la variable se establece en Nothing .Si Option Strict está activado, se produce un error en tiempo de compilación. |
No | Sí | Dim qty = 5 |
Si Option Infer está activado (valor predeterminado), la variable toma el tipo de datos del inicializador. Consulte Inferencia de tipo de variable local.Si Option Infer está desactivado y Option Strict está desactivado, la variable toma el tipo de datos de Object .Si Option Infer está desactivado y Option Strict está activado, se produce un error en tiempo de compilación. |
Sí | No | Dim qty As Integer |
La variable se inicializa con el valor predeterminado del tipo de datos. Para más información, consulte Dim (Instrucción). |
Sí | Sí | Dim qty As Integer = 5 |
Si el tipo de datos del inicializador no es convertible al tipo de datos especificado, se produce un error en tiempo de compilación. |
Cuando la instrucción Option Strict no está presente
Si el código fuente no contiene una instrucción Option Strict
, se utiliza la configuración de Option Strict de Página Compilación, Diseñador de proyectos (Visual Basic). En Página Compilación hay valores que proporcionan control adicional sobre las condiciones que generan un error.
Si usa el compilador de línea de comandos, puede usar la opción del compilador -optionstrict para especificar una configuración para Option Strict
.
Para establecer Option Strict en el IDE
Nota:
Es posible que tu equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio en las siguientes instrucciones. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos. Para obtener más información, vea Personalizar el IDE.
En el Explorador de soluciones, seleccione un proyecto. En el menú Proyecto , haga clic en Propiedades.
En la pestaña Compilar, establezca el valor en el cuadro Option Strict.
Establecimiento de configuraciones de advertencia en el IDE
Si usa Página Compilación, Diseñador de proyectos (Visual Basic) en lugar de una instrucción Option Strict
, tiene un control adicional sobre las condiciones que generan errores. En la sección Configuraciones de advertencias de la página Compilar se incluyen valores que se corresponden con las tres condiciones que producen un error en tiempo de compilación cuando Option Strict
está activado. Estas opciones son las siguientes:
Conversión implícita
Enlace en tiempo de ejecución; la llamada podría generar un error en tiempo de ejecución
Tipo implícito; se supone el objeto
Al establecer Option Strict en On, estos tres valores de configuración de advertencias se establecen en Error. Al establecer Option Strict en Off, las tres opciones se establecen en None.
Puede cambiar individualmente cada valor de configuración de advertencia por None, Warning o Error. Si se establecen las tres opciones de configuración de advertencia en Error, On
aparece en el cuadro Option strict
. Si se establecen las tres en None, Off
aparece en este cuadro. Para cualquier otra combinación de estas opciones, aparece (personalizado).
Establecimiento de la configuración predeterminada Option Strict para nuevos proyectos
Cuando se crea un proyecto, el valor Option Strict de la pestaña Compilar se establece en el valor de la opción Option Strict del cuadro de diálogo Opciones.
Para establecer Option Strict
en este cuadro de diálogo, en el menú Herramientas, haga clic en Opciones. En el cuadro de diálogo Opciones, expanda Proyectos y soluciones y, después, haga clic en Valores predeterminados de VB. El valor predeterminado inicial de Valores predeterminados de VB es Off
.
Establecimiento de Option Strict en la línea de comandos
Incluya la opción del compilador -optionstrict en el comando vbc.
Ejemplo 1
En los ejemplos siguientes se muestran los errores en tiempo de compilación causados por conversiones de tipos implícitas que son conversiones de restricción. Esta categoría de errores corresponde a la condición Conversión implícita de la página Compilación.
' 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
Ejemplo 2
En el ejemplo siguiente se muestra un error en tiempo de compilación causado por el enlace en tiempo de ejecución. Esta categoría de errores corresponde con la condición Enlace en tiempo de ejecución; la llamada podría fallar en tiempo de ejecución de la página Compilación.
' 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
Ejemplo 3
En los ejemplos siguientes se muestran los errores causados por variables que se declaran con un tipo implícito de Object
. Esta categoría de errores corresponde a la condición Tipo implícito; se supone el objeto de la página Compilación.
' 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
Consulte también
- Widening and Narrowing Conversions
- Conversiones implícitas y explícitas
- Página Compilación, Diseñador de proyectos (Visual Basic)
- Option Explicit (instrucción)
- Type Conversion Functions
- Procedimiento para obtener acceso a los miembros de un objeto
- Expresiones insertadas en XML
- Conversión de delegado flexible
- Enlace en tiempo de ejecución en las soluciones de Office
- -optionstrict
- Valores predeterminados de Visual Basic, Proyectos, Opciones (Cuadro de diálogo)