Compartir vía


Option Strict (instrucción)

Restringe las conversiones implícitas de tipos de datos a solo conversiones de ampliación, no permite el enlace en tiempo de ejecución y no permite la escritura implícita que da como resultado un Object tipo.

Sintaxis

Option Strict { On | Off }

Partes

Término Definición
On Opcional. Habilita la Option Strict comprobación.
Off Opcional. Deshabilita la Option Strict comprobación.

Observaciones

Cuando Option Strict On o Option Strict aparece en un archivo, las condiciones siguientes provocan un error en tiempo de compilación:

  • Conversiones de restricción implícitas

  • Enlace en tiempo de demora

  • Escritura implícita que da como resultado un Object tipo

Nota:

En las configuraciones de advertencia que puede establecer en la página Compilar, el 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 obtener información sobre cómo usar estas opciones, consulte Para establecer configuraciones de advertencia en el IDE más adelante en este tema.

La Option Strict Off instrucción desactiva la comprobación de errores y advertencias para las tres condiciones, incluso si la configuración del IDE asociada especifica para activar estos errores o advertencias. La Option Strict On instrucción activa la comprobación de errores y advertencias para las tres condiciones, incluso si la configuración del IDE asociada especifica para desactivar estos errores o advertencias.

Si se usa, la Option Strict instrucción debe aparecer antes de cualquier otra instrucción de código de un archivo.

Cuando se establece en Option StrictOn, Visual Basic comprueba que los tipos de datos se especifican para todos los elementos de programación. Los tipos de datos se pueden especificar explícitamente o especificar mediante la inferencia de tipos locales. Se recomienda especificar tipos de datos para todos los elementos de programación, por los siguientes motivos:

  • Habilita el soporte de IntelliSense para las variables y los parámetros. Esto le permite ver sus propiedades y otros miembros a medida que escribe 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 es que, si no especifica un tipo de datos para un elemento de programación, el compilador de Visual Basic lo asigna al Object tipo. Es posible que el código compilado tenga que convertir entre Object y otros tipos de datos, 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 hay una conversión de tipo 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. La pérdida de datos puede producirse cuando el valor de un tipo de datos se convierte en un tipo de datos que tiene menos precisión o una capacidad menor. Se produce un error en tiempo de ejecución si se produce 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 obtener más información, vea Conversiones implícitas y explícitasy conversiones de ampliación y restricción.

Las conversiones que pueden provocar errores incluyen conversiones implícitas que se producen en expresiones. Para obtener más información, consulte los temas siguientes:

Al concatenar cadenas mediante el operador & , todas las conversiones a las cadenas se consideran de ampliación. 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 que tiene un tipo de datos distinto del parámetro correspondiente, una conversión de restricción produce 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 For Each…Next colección a la variable de control de bucle. Esto ocurre incluso si Option Strict está activado. Para obtener más información, vea la sección "Conversiones de restricción" en For Each... Siguiente instrucción.

Errores de enlace en tiempo de demora

Un objeto se enlaza en tiempo de ejecución cuando se asigna a una propiedad o método de una variable que se declara como de tipo Object. Para obtener más información, consulte Enlace anticipado 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 deduce un tipo de Object . Esto se produce principalmente cuando se usa una Dim instrucción para declarar una variable sin usar una As cláusula y Option Infer está desactivada. Para obtener más información, vea Option Infer Statement y la Especificación del lenguaje Visual Basic.

En el caso de los parámetros de método, la As cláusula es opcional si Option Strict está desactivada. Sin embargo, si algún parámetro usa una As cláusula , todos deben usarlo. Si Option Strict está activado, la As cláusula es necesaria para cada definición de parámetro.

Si declara una variable sin usar una As cláusula y la Nothingestablece en , la variable tiene un tipo de Object. No se produce ningún error en tiempo de compilación en este caso cuando Option Strict está activado y Option Infer está activado. Un ejemplo de esto es Dim something = Nothing.

Valores y tipos de datos predeterminados

En la tabla siguiente se describen los resultados de varias combinaciones de especificar el tipo de datos y el inicializador en una instrucción Dim.

¿Tipo de datos especificado? ¿Se especificó el inicializador? 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 tipos locales.

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 en el valor predeterminado del tipo de datos. Para obtener más información, vea Dim Statement.
Dim qty As Integer = 5 Si el tipo de datos del inicializador no se puede convertir en el tipo de datos especificado, se produce un error en tiempo de compilación.

Cuando una instrucción Option Strict no está presente

Si el código fuente no contiene una Option Strict instrucción , se usa la opción Option strict en la página Compilar, se usa el Diseñador de proyectos (Visual Basic). La página Compilar tiene opciones de configuración 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:

El equipo puede mostrar nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio en las instrucciones siguientes. La edición de Visual Studio que tiene y la configuración que usa determinan estos elementos. Para obtener más información, consulte Personalizando el IDE.

  1. En 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 .

Para establecer configuraciones de advertencia en el IDE

Al usar la página Compilar, el Diseñador de proyectos (Visual Basic) en lugar de una Option Strict instrucción , tiene control adicional sobre las condiciones que generan errores. La sección Configuraciones de advertencia de la página de compilación tiene valores que corresponden a las tres condiciones que provocan un error en tiempo de compilación cuando Option Strict está activado. A continuación se muestran estas opciones:

  • Conversión implícita

  • Enlace en tiempo de demora; la llamada podría producir un error en tiempo de ejecución

  • Tipo implícito; objeto asumido

Al establecer Option Strict en Activado, las tres opciones de configuración de advertencia se establecen en Error. Al establecer Option Strict en Desactivado, los tres valores se establecen en Ninguno.

Puede cambiar individualmente cada opción de configuración de advertencia a Ninguno, Advertencia o Error. Si los tres valores de configuración de advertencia se establecen en Error, On aparece en el Option strict cuadro . Si los tres se establecen en Ninguno, Off aparece en este cuadro. Para cualquier otra combinación de estos valores, aparece (personalizado).

Para establecer la configuración predeterminada Option Strict para los nuevos proyectos

Al crear un proyecto, la opción Option Strict de la pestaña Compilar se establece en la opción 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, a continuación, haga clic en Valores predeterminados de VB. La configuración predeterminada inicial de VB Defaults es Off.

Para establecer 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 errores en tiempo de compilación causados por conversiones de tipos implícitas que están limitando las conversiones. Esta categoría de errores corresponde a la condición de conversión implícita en la página Compilar.

' 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 al enlace en tiempo de ejecución; la llamada podría producir un error en la condición en tiempo de ejecución en la página de 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 errores causados por variables declaradas con un tipo implícito de Object. Esta categoría de errores corresponde al tipo implícito; condición de objeto asumido en la página de 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