Option Strict StatementOption Strict Statement

Restringe las conversiones de tipos de datos implícitos solo a las conversiones de ampliación, no permite el enlace en tiempo de ejecución y no permite los tipos implícitos que generan un tipo de Object.Restricts implicit data type conversions to only widening conversions, disallows late binding, and disallows implicit typing that results in an Object type.

SintaxisSyntax

Option Strict { On | Off }  

ElementosParts

TérminoTerm de esquema JSONDefinition
On Opcional.Optional. Habilita la comprobación de Option Strict.Enables Option Strict checking.
Off Opcional.Optional. Deshabilita la comprobación de Option Strict.Disables Option Strict checking.

ComentariosRemarks

Cuando Option Strict On o Option Strict aparece en un archivo, las condiciones siguientes producen un error en tiempo de compilación:When Option Strict On or Option Strict appears in a file, the following conditions cause a compile-time error:

  • Conversiones de restricción implícitasImplicit narrowing conversions

  • Enlace en tiempo de ejecuciónLate binding

  • Tipos implícitos que dan como resultado un tipo ObjectImplicit typing that results in an Object type

Nota

En las configuraciones de advertencia que se pueden establecer en la Página compilar, diseñador de proyectos (Visual Basic), hay tres opciones de configuración que se corresponden con las tres condiciones que causan un error en tiempo de compilación.In the warning configurations that you can set on the Compile Page, Project Designer (Visual Basic), there are three settings that correspond to the three conditions that cause a compile-time error. Para obtener información sobre cómo usar estos valores, vea para establecer configuraciones de advertencia en el IDE más adelante en este tema.For information about how to use these settings, see To set warning configurations in the IDE later in this topic.

La instrucción Option Strict Off desactiva la comprobación de errores y advertencias para las tres condiciones, incluso si la configuración de IDE asociada especifica que se activen estos errores o advertencias.The Option Strict Off statement turns off error and warning checking for all three conditions, even if the associated IDE settings specify to turn on these errors or warnings. La instrucción Option Strict On activa la comprobación de errores y advertencias para las tres condiciones, incluso si la configuración de IDE asociada especifica que se desactiven estos errores o advertencias.The Option Strict On statement turns on error and warning checking for all three conditions, even if the associated IDE settings specify to turn off these errors or warnings.

Si se utiliza, la instrucción Option Strict debe aparecer antes que cualquier otra instrucción de código en un archivo.If used, the Option Strict statement must appear before any other code statements in a file.

Cuando se establece Option Strict en On, Visual Basic comprueba que los tipos de datos se especifican para todos los elementos de programación.When you set Option Strict to On, Visual Basic checks that data types are specified for all programming elements. Los tipos de datos se pueden especificar explícitamente o especificarse mediante la inferencia de tipo local.Data types can be specified explicitly, or specified by using local type inference. Se recomienda especificar los tipos de datos para todos los elementos de programación, por las razones siguientes:Specifying data types for all your programming elements is recommended, for the following reasons:

  • Habilita la compatibilidad con IntelliSense para las variables y los parámetros.It enables IntelliSense support for your variables and parameters. Esto le permite ver sus propiedades y otros miembros a medida que escribe código.This enables you to see their properties and other members as you type code.

  • Permite que el compilador realice la comprobación de tipos.It enables the compiler to perform type checking. 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.Type checking helps you find statements that can fail at run time because of type conversion errors. También identifica las llamadas a métodos en objetos que no admiten esos métodos.It also identifies calls to methods on objects that do not support those methods.

  • Acelera la ejecución del código.It speeds up the execution of code. Una razón para esto es que, si no se especifica un tipo de datos para un elemento de programación, el compilador Visual Basic le asigna el tipo de Object.One reason for this is that if you do not specify a data type for a programming element, the Visual Basic compiler assigns it the Object type. Es posible que el código compilado tenga que realizar una conversión entre Object y otros tipos de datos, lo que reduce el rendimiento.Compiled code might have to convert back and forth between Object and other data types, which reduces performance.

Errores de conversión de restricción implícitaImplicit Narrowing Conversion Errors

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.Implicit narrowing conversion errors occur when there is an implicit data type conversion that is a narrowing conversion.

Visual Basic puede convertir muchos tipos de datos en otros tipos de datos.Visual Basic can convert many data types to other data types. 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 menor capacidad.Data loss can occur when the value of one data type is converted to a data type that has less precision or a smaller capacity. Se produce un error en tiempo de ejecución si se produce un error en una conversión de restricción.A run-time error occurs if such a narrowing conversion fails. Option Strict garantiza la notificación en tiempo de compilación de estas conversiones de restricción para que pueda evitarlas.Option Strict ensures compile-time notification of these narrowing conversions so that you can avoid them. Para obtener más información, vea conversiones implícitas y explícitas , y conversiones de ampliación y de restricción.For more information, see Implicit and Explicit Conversions and Widening and Narrowing Conversions.

Entre las conversiones que pueden producir errores se incluyen las conversiones implícitas que se producen en expresiones.Conversions that can cause errors include implicit conversions that occur in expressions. Para obtener más información, vea los temas siguientes:For more information, see the following topics:

Al concatenar cadenas mediante el operador &, se considera que todas las conversiones de las cadenas son de ampliación.When you concatenate strings by using the & Operator, all conversions to the strings are considered to be widening. Por lo tanto, estas conversiones no generan un error de conversión de restricción implícita, aun cuando Option Strict esté activada.So these conversions do not generate an implicit narrowing conversion error, even if Option Strict is on.

Cuando se llama a un método que tiene un argumento que tiene un tipo de datos diferente del parámetro correspondiente, una conversión de restricción produce un error en tiempo de compilación si Option Strict está activado.When you call a method that has an argument that has a data type different from the corresponding parameter, a narrowing conversion causes a compile-time error if Option Strict is on. Puede evitar el error en tiempo de compilación mediante una conversión de ampliación o una conversión explícita.You can avoid the compile-time error by using a widening conversion or an explicit conversion.

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 de For Each…Next a la variable de control de bucle.Implicit narrowing conversion errors are suppressed at compile-time for conversions from the elements in a For Each…Next collection to the loop control variable. Esto sucede incluso si Option Strict está activada.This occurs even if Option Strict is on. Para obtener más información, vea la sección acerca de las conversiones de restricción en for each... Instrucción siguiente.For more information, see the "Narrowing Conversions" section in For Each...Next Statement.

Errores de enlace en tiempo de ejecuciónLate Binding Errors

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.An object is late bound when it is assigned to a property or method of a variable that is declared to be of type Object. Para obtener más información, vea enlace anticipado y en tiempo de ejecución.For more information, see Early and Late Binding.

Errores de tipo de objeto implícitoImplicit Object Type Errors

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.Implicit object type errors occur when an appropriate type cannot be inferred for a declared variable, so a type of Object is inferred. 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.This primarily occurs when you use a Dim statement to declare a variable without using an As clause, and Option Infer is off. Para obtener más información, vea la instrucción Option Infer y la especificación del lenguaje Visual Basic.For more information, see Option Infer Statement and the Visual Basic Language Specification.

En el caso de los parámetros de método, la cláusula As es opcional si Option Strict está en OFF.For method parameters, the As clause is optional if Option Strict is off. Sin embargo, si cualquiera de los parámetros utiliza una cláusula As, todos deben usarlo.However, if any one parameter uses an As clause, they all must use it. Si Option Strict está activada, se requiere la cláusula As para cada definición de parámetro.If Option Strict is on, the As clause is required for every parameter definition.

Si declara una variable sin usar una cláusula As y la establece en Nothing, la variable tiene un tipo de Object.If you declare a variable without using an As clause and set it to Nothing, the variable has a type of Object. En este caso, no se produce ningún error en tiempo de compilación cuando Option Strict está activada y Option Infer está activada.No compile-time error occurs in this case when Option Strict is on and Option Infer is on. Un ejemplo de esto es Dim something = Nothing.An example of this is Dim something = Nothing.

Tipos de datos y valores predeterminadosDefault Data Types and Values

En la tabla siguiente se describen los resultados de diversas combinaciones de especificar el tipo de datos y el inicializador en una instrucción Dim.The following table describes the results of various combinations of specifying the data type and initializer in a Dim Statement.

¿Tipo de datos especificado?Data type specified? ¿Inicializador especificado?Initializer specified? EjemploExample ResultadoResult
NoNo NoNo Dim qty Si Option Strict está desactivado (valor predeterminado), la variable se establece en Nothing.If Option Strict is off (the default), the variable is set to Nothing.

Si Option Strict está activado, se produce un error en tiempo de compilación.If Option Strict is on, a compile-time error occurs.
NoNo Yes Dim qty = 5 Si Option Infer está activado (valor predeterminado), la variable toma el tipo de datos del inicializador.If Option Infer is on (the default), the variable takes the data type of the initializer. Vea inferencia de tipo de local.See Local Type Inference.

Si Option Infer está desactivado y Option Strict está desactivado, la variable toma el tipo de datos de Object.If Option Infer is off and Option Strict is off, the variable takes the data type of Object.

Si Option Infer está desactivado y Option Strict está activado, se produce un error en tiempo de compilación.If Option Infer is off and Option Strict is on, a compile-time error occurs.
Yes NoNo Dim qty As Integer La variable se inicializa con el valor predeterminado del tipo de datos.The variable is initialized to the default value for the data type. Para obtener más información, vea Dim (instrucción).For more information, see Dim Statement.
Yes Yes 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.If the data type of the initializer is not convertible to the specified data type, a compile-time error occurs.

Cuando una instrucción Option Strict no está presenteWhen an Option Strict Statement Is Not Present

Si el código fuente no contiene una instrucción Option Strict, se usa el valor Option Strict en la Página compilar, el diseñador de proyectos (Visual Basic) .If the source code does not contain an Option Strict statement, the Option strict setting on the Compile Page, Project Designer (Visual Basic) is used. La Página compilar tiene valores que proporcionan un control adicional sobre las condiciones que generan un error.The Compile Page has settings that provide additional control over the conditions that generate an error.

Si usa el compilador de línea de comandos, puede usar la opción del compilador -OptionStrict para especificar un valor para Option Strict.If you are using the command-line compiler, you can use the -optionstrict compiler option to specify a setting for Option Strict.

Para establecer Option Strict en el IDETo set Option Strict in the 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.Your computer might show different names or locations for some of the Visual Studio user interface elements in the following instructions. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos.The Visual Studio edition that you have and the settings that you use determine these elements. Para obtener más información, vea Personalizar el IDE.For more information, see Personalizing the IDE.

  1. En el Explorador de soluciones, seleccione un proyecto.In Solution Explorer, select a project. En el menú Proyecto, haga clic en Propiedades.On the Project menu, click Properties.

  2. En la pestaña compilar , establezca el valor en el cuadro Option Strict .On the Compile tab, set the value in the Option Strict box.

Para establecer configuraciones de advertencia en el IDETo set warning configurations in the IDE

Cuando use la Página compilar, el diseñador de proyectos (Visual Basic) en lugar de una instrucción Option Strict, tendrá un control adicional sobre las condiciones que generan errores.When you use the Compile Page, Project Designer (Visual Basic) instead of an Option Strict statement, you have additional control over the conditions that generate errors. La sección configuraciones de advertencia de la Página compilar tiene valores de configuración que corresponden a las tres condiciones que causan un error en tiempo de compilación cuando Option Strict está activada.The Warning configurations section of the Compile Page has settings that correspond to the three conditions that cause a compile-time error when Option Strict is on. Estas opciones son las siguientes:Following are these settings:

  • Conversión implícitaImplicit conversion

  • Enlace en tiempo de ejecución; la llamada podría generar un error en tiempo de ejecuciónLate binding; call could fail at run time

  • Tipo implícito; se supone el objetoImplicit type; object assumed

Al establecer Option Strict en On, estos tres valores de configuración de advertencias se establecen en Error.When you set Option Strict to On, all three of these warning configuration settings are set to Error. Al establecer Option Strict en Off, las tres opciones se establecen en None.When you set Option Strict to Off, all three settings are set to None.

Puede cambiar individualmente cada valor de configuración de advertencia por None, Warning o Error.You can individually change each warning configuration setting to None, Warning, or Error. Si se establecen las tres opciones de configuración de advertencia en Error, On aparece en el cuadro Option strict.If all three warning configuration settings are set to Error, On appears in the Option strict box. Si se establecen las tres en None, Off aparece en este cuadro.If all three are set to None, Off appears in this box. Para cualquier otra combinación de estas opciones, aparece (personalizado) .For any other combination of these settings, (custom) appears.

Para establecer la configuración predeterminada de Option Strict para los nuevos proyectosTo set the Option Strict default setting for new projects

Al crear un proyecto, el valor Option Strict de la pestaña compilar se establece en el valor Option Strict del cuadro de diálogo Opciones .When you create a project, the Option Strict setting on the Compile tab is set to the Option Strict setting in the Options dialog box.

Para establecer Option Strict en este cuadro de diálogo, en el menú herramientas , haga clic en Opciones.To set Option Strict in this dialog box, on the Tools menu, click Options. En el cuadro de diálogo Opciones, expanda Proyectos y soluciones y, después, haga clic en Valores predeterminados de VB.In the Options dialog box, expand Projects and Solutions, and then click VB Defaults. La configuración predeterminada inicial en los valores predeterminados de VB es Off.The initial default setting in VB Defaults is Off.

Para establecer Option Strict en la línea de comandosTo set Option Strict on the command line

Incluya la opción del compilador -OptionStrict en el comando VBC .Include the -optionstrict compiler option in the vbc command.

EjemploExample

En los siguientes ejemplos se muestran errores en tiempo de compilación causados por conversiones de tipo implícitas que son conversiones de restricción.The following examples demonstrate compile-time errors caused by implicit type conversions that are narrowing conversions. Esta categoría de errores corresponde a la condición de conversión implícita en la Página compilar.This category of errors corresponds to the Implicit conversion condition on the Compile Page.

' 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

EjemploExample

En el ejemplo siguiente se muestra un error en tiempo de compilación causado por el enlace en tiempo de ejecución.The following example demonstrates a compile-time error caused by late binding. Esta categoría de errores corresponde al enlace en tiempo de ejecución; la llamada podría producir un error en la condición de tiempo de ejecución en la Página de compilación.This category of errors corresponds to the Late binding; call could fail at run time condition on the Compile Page.

' 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

EjemploExample

En los siguientes ejemplos se muestran errores causados por variables declaradas con un tipo implícito de Object.The following examples demonstrate errors caused by variables that are declared with an implicit type of Object. Esta categoría de errores corresponde al tipo implícito; se supone que el objeto es una condición en la Página de compilación.This category of errors corresponds to the Implicit type; object assumed condition on the Compile Page.

' 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

Vea tambiénSee also