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 entre Object 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 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.
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).
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.

  1. En el Explorador de soluciones, seleccione un proyecto. En el menú Proyecto , haga clic en Propiedades.

  2. 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