Option Strict StatementOption Strict Statement

Restringe las conversiones de tipos de datos implícitos a conversiones de ampliación únicamente, no permite el enlace más tarde 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 condiciones siguientes producen un error de 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 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 esta configuración, consulte 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.

El Option Strict Off instrucción desactiva error y advertencia de comprobación para todas las tres condiciones, incluso si la configuración de IDE asociada que se especifique 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 de error y advertencia de comprobación para todas las tres condiciones, incluso si la configuración de IDE asociada que se especifique 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, el 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 pueden especificados explícitamente o se especifica mediante la inferencia de tipo local.Data types can be specified explicitly, or specified by using local type inference. Especificar los tipos de datos para todos los elementos de programación se recomienda, 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 realizar la comprobación de tipos.It enables the compiler to perform type checking. Comprobación de tipos ayuda a encontrar las instrucciones que 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 se identifican las llamadas a métodos en objetos que no son compatibles con estos 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 le 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 a otros tipos de datos.Visual Basic can convert many data types to other data types. Puede producirse una pérdida de datos cuando el valor de un tipo de datos se convierte en un tipo de datos que tiene menor 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. Si se produce un error de este tipo una conversión de restricción, se produce un error de tiempo de ejecució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 conversiones de ampliación y de restricción.For more information, see Implicit and Explicit Conversions and Widening and Narrowing Conversions.

Las conversiones que pueden producir errores incluyen 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. Por lo que estas conversiones no generan un error de conversión de restricción implícitas, incluso si Option Strict se encuentra en.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 distinto del parámetro correspondiente, una conversión de restricción produce un error de tiempo de compilación si Option Strict se encuentra en.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ícitas se suprimen en tiempo de compilación para las conversiones de los elementos en una 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 se encuentra en.This occurs even if Option Strict is on. Para obtener más información, vea la sección "Conversiones de restricción" en For Each... Next (instrucción).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 Early and Late Binding.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 Option Infer instrucción 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 un As cláusula, todas ellas deben usarlo.However, if any one parameter uses an As clause, they all must use it. Si Option Strict está activado, el As cláusula es necesaria para cada definición de parámetro.If Option Strict is on, the As clause is required for every parameter definition.

Si se declara una variable sin utilizar 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 se encuentra en y Option Infer se encuentra en.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 el inicializador en una Dim (instrucción).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 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 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 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 un mayor control sobre las condiciones que generan un error.The Compile Page has settings that provide additional control over the conditions that generate an error.

Si está utilizando el compilador de línea de comandos, puede usar el /optionstrict opción del compilador 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 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 advertencia 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), tiene 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. El configuraciones de advertencia 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 se encuentra en.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 predeterminado Option Strict para los nuevos proyectosTo set the Option Strict default setting for new projects

Cuando se crea un proyecto, el Option Strict en el compilar pestaña está establecida 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 la 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 de tipos 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 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

En el ejemplo siguiente se muestra un error en tiempo de compilación causado por el enlace más tarde.The following example demonstrates a compile-time error caused by late binding. Esta categoría de errores que se corresponde con el Late enlace; la llamada podría fallar 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 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 tipos implícita; 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

Conversiones de ampliación y de restricciónWidening and Narrowing Conversions
Conversiones implícitas y explícitasImplicit and Explicit Conversions
Página Compilación, Diseñador de proyectos (Visual Basic)Compile Page, Project Designer (Visual Basic)
Option Explicit (instrucción)Option Explicit Statement
Funciones de conversión de tiposType Conversion Functions
Obtener acceso a los miembros de un objetoHow to: Access Members of an Object
Expresiones incrustadas en XMLEmbedded Expressions in XML
Conversión de delegado flexibleRelaxed Delegate Conversion
Enlace en tiempo de ejecución en las soluciones de OfficeLate Binding in Office Solutions
/optionstrict/optionstrict
Valores predeterminados de Visual Basic, Proyectos, Opciones (Cuadro de diálogo)Visual Basic Defaults, Projects, Options Dialog Box