Option Strict StatementOption Strict Statement

Restringe las conversiones de tipos de datos implícitos a conversiones de ampliación únicamente, no permite el enlace en tiempo de ejecución y no permite tipos implícitos que da como resultado un Object tipo.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 DefiniciónDefinition
On Opcional.Optional. Permite Option Strict comprobación.Enables Option Strict checking.
Off Opcional.Optional. Deshabilita Option Strict comprobación.Disables Option Strict checking.

ComentariosRemarks

Cuando Option Strict On o Option Strict aparece en el archivo, las siguientes condiciones producir 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 advertencias que se pueden establecer en el página compilación, Diseñador de proyectos (Visual Basic), hay tres opciones que corresponden a las tres condiciones que producen 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 estas opciones, consulte para establecer configuraciones de advertencias 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.

El Option Strict Off instrucción desactiva error y advertencia de comprobación para todas las tres condiciones, incluso si especifica la configuración de IDE asociada para activar 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. El Option Strict On instrucción activa error y advertencia de comprobación para todas las tres condiciones, incluso si especifica la configuración de IDE asociada para desactivar 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 usa, la Option Strict la instrucción 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.

Al establecer Option Strict a On, Visual Basic comprueba que se especifican los tipos de datos 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. Tipos de datos se pueden especificar explícitamente o especificados mediante el uso de la inferencia de tipos local.Data types can be specified explicitly, or specified by using local type inference. Se recomienda la especificación de 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 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 al compilador que realice la comprobación de tipos.It enables the compiler to perform type checking. Comprobación de tipos le ayuda a encontrar las instrucciones que se pueden producir un error en tiempo de ejecución debido a errores de conversión de tipo.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 especifica un tipo de datos para un elemento de programación, el compilador de Visual Basic asigna el Object tipo.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. Código compilado que sea necesario convertir 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ícitasImplicit 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 a muchos tipos de datos en otros tipos de datos.Visual Basic can convert many data types to other data types. Cuando el valor de un tipo de datos se convierte en un tipo de datos que tiene menos precisión o menor capacidad, puede producirse pérdida de datos.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 de tiempo de ejecución si se produce un error de este tipo 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, consulte conversiones implícitas y explícitas y Widening and Narrowing Conversions.For more information, see Implicit and Explicit Conversions and Widening and Narrowing Conversions.

Las conversiones que pueden causar errores incluyen las conversiones implícitas que se producen en las 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 uso de la & operador, todas las conversiones a las cadenas se consideran de ampliación.When you concatenate strings by using the & Operator, all conversions to the strings are considered to be widening. Para que estas conversiones no genere un error de conversión de restricción implícitas, incluso si Option Strict está activado.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 de 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 de 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.

Errores de conversión de restricción implícita se suprimen en tiempo de compilación para las conversiones de los elementos de un For Each…Next colección 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 ocurre incluso si Option Strict está activado.This occurs even if Option Strict is on. Para obtener más información, vea la sección "Narrowing Conversions" en For Each... Instrucción Next.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, consulte temprana y enlace tardío.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, consulte instrucción Option Infer y especificación del lenguaje Visual Basic.For more information, see Option Infer Statement and the Visual Basic Language Specification.

Para los parámetros de método, el As cláusula es opcional si Option Strict está desactivada.For method parameters, the As clause is optional if Option Strict is off. Sin embargo, si utiliza un parámetro una As cláusula, todas ellas deben usarla.However, if any one parameter uses an As clause, they all must use it. Si Option Strict está activado, el As cláusula es obligatoria 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 un As cláusula y establézcalo 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 se produce ningún error de tiempo de compilación cuando Option Strict está activado y Option Infer está activado.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 describe los resultados de diversas combinaciones de especificar el tipo de datos y un 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. Consulte inferencia de tipos 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, consulte instrucción Dim.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 un Option Strict instrucción, el Option strict en el página compilación, Diseñador de proyectos (Visual Basic) se utiliza.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. El página compilación tiene una configuración que proporciona 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 el /optionstrict para especificar un valor para la opción del compilador Option Strict.If you are using the command-line compiler, you can use the /optionstrict compiler option to specify a setting for Option Strict.

Cómo 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 el compilar pestaña, establezca el valor de la Option Strict cuadro.On the Compile tab, set the value in the Option Strict box.

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

Cuando se usa el página compilación, Diseñador de proyectos (Visual Basic) en lugar de un Option Strict instrucción, tenga más control 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. El configuraciones de advertencias sección de la página compilación tiene una configuración que se corresponde con las tres condiciones que producen un error en tiempo de compilación cuando Option Strict está activado.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 el valor de Option Strict de forma predeterminada para nuevos proyectosTo set the Option Strict default setting for new projects

Cuando se crea un proyecto, el Option Strict en el compilar ficha se establece en el Option Strict en el opciones cuadro de diálogo.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 herramientas menú, 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. El valor predeterminado inicial de 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

Incluir el /optionstrict opción del compilador en el vbc comando.Include the /optionstrict compiler option in the vbc command.

EjemploExample

Los ejemplos siguientes muestran errores de tiempo de compilación causados por las conversiones implícitas que las 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 que se corresponde con el conversión implícita condición en la página compilación.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

El ejemplo siguiente 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 que se corresponde con el Late binding; llamada podría generar un error en tiempo de ejecución condición en la página 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

Los ejemplos siguientes muestran los errores causados por las variables que se declaran 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 que se corresponde con el tipo implícito; se supone el objeto condición en la página 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