Instrução Option StrictOption Strict Statement

Restringe as conversões de tipo de dados implícitos apenas a conversões de alargamento, não permite a associação tardia e não permite a digitação implícita que resulta em um 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.

SintaxeSyntax

Option Strict { On | Off }  

PartesParts

TermoTerm DefiniçãoDefinition
On Opcional.Optional. Habilita a verificação de Option Strict.Enables Option Strict checking.
Off Opcional.Optional. Desabilita a verificação de Option Strict.Disables Option Strict checking.

ComentáriosRemarks

Quando Option Strict On ou Option Strict aparece em um arquivo, as seguintes condições causam um erro de tempo de compilação:When Option Strict On or Option Strict appears in a file, the following conditions cause a compile-time error:

  • Conversões de estreitamento implícitasImplicit narrowing conversions

  • Associação tardiaLate binding

  • Digitação implícita que resulta em um tipo ObjectImplicit typing that results in an Object type

Observação

Nas configurações de aviso que você pode definir na página compilar, o designer de projeto (Visual Basic), há três configurações que correspondem às três condições que causam um erro de tempo de compilação.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 obter informações sobre como usar essas configurações, consulte para definir configurações de aviso no IDE mais adiante neste tópico.For information about how to use these settings, see To set warning configurations in the IDE later in this topic.

A instrução Option Strict Off desativa a verificação de erros e avisos para todas as três condições, mesmo que as configurações do IDE associadas especifiquem para ativar esses erros ou avisos.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. A instrução Option Strict On ativa a verificação de erros e avisos para todas as três condições, mesmo que as configurações do IDE associadas especifiquem para desativar esses erros ou avisos.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.

Se usado, a instrução Option Strict deve aparecer antes de qualquer outra instrução de código em um arquivo.If used, the Option Strict statement must appear before any other code statements in a file.

Quando você define Option Strict como On, Visual Basic verifica se os tipos de dados são especificados para todos os elementos de programação.When you set Option Strict to On, Visual Basic checks that data types are specified for all programming elements. Os tipos de dados podem ser especificados explicitamente ou especificados usando a inferência de tipo local.Data types can be specified explicitly, or specified by using local type inference. É recomendável especificar tipos de dados para todos os elementos de programação, pelos seguintes motivos:Specifying data types for all your programming elements is recommended, for the following reasons:

  • Ele habilita o suporte IntelliSense para suas variáveis e parâmetros.It enables IntelliSense support for your variables and parameters. Isso permite que você veja suas propriedades e outros membros à medida que digita o código.This enables you to see their properties and other members as you type code.

  • Ele permite que o compilador execute a verificação de tipo.It enables the compiler to perform type checking. A verificação de tipo ajuda a encontrar instruções que podem falhar em tempo de execução devido a erros de conversão de tipo.Type checking helps you find statements that can fail at run time because of type conversion errors. Ele também identifica chamadas para métodos em objetos que não dão suporte a esses métodos.It also identifies calls to methods on objects that do not support those methods.

  • Ele acelera a execução do código.It speeds up the execution of code. Um motivo para isso é que se você não especificar um tipo de dados para um elemento de programação, o compilador Visual Basic atribuirá a ele o 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. O código compilado pode precisar fazer a conversão entre Object e outros tipos de dados, o que reduz o desempenho.Compiled code might have to convert back and forth between Object and other data types, which reduces performance.

Erros de conversão de estreitamento implícitoImplicit Narrowing Conversion Errors

Erros de conversão de redução implícita ocorrerem quando há uma conversão de tipo de dados implícita que é uma conversão de redução.Implicit narrowing conversion errors occur when there is an implicit data type conversion that is a narrowing conversion.

Visual Basic pode converter muitos tipos de dados em outros tipos de dados.Visual Basic can convert many data types to other data types. A perda de dados pode ocorrer quando o valor de um tipo de dados é convertido em um tipo de dados que tem menos precisão ou uma capacidade menor.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. Um erro em tempo de execução ocorrerá se uma conversão de restrição desse tipo falhar.A run-time error occurs if such a narrowing conversion fails. Option Strict garante a notificação em tempo de compilação dessas conversões redutoras para que você possa evitá-las.Option Strict ensures compile-time notification of these narrowing conversions so that you can avoid them. Para obter mais informações, consulte conversões implícitas e explícitas e conversões de alargamento e estreitamento.For more information, see Implicit and Explicit Conversions and Widening and Narrowing Conversions.

Conversões que podem causar erros incluem conversões implícitas que ocorrem em expressões.Conversions that can cause errors include implicit conversions that occur in expressions. Para mais informações, consulte os seguintes tópicos:For more information, see the following topics:

Quando você concatena cadeias de caracteres usando o operador &, todas as conversões para as cadeias de caracteres são consideradas como sendo ampliadas.When you concatenate strings by using the & Operator, all conversions to the strings are considered to be widening. Portanto, essas conversões não geram um erro de conversão de estreitamento implícito, mesmo se Option Strict estiver ativada.So these conversions do not generate an implicit narrowing conversion error, even if Option Strict is on.

Quando você chamar um método que tem um argumento que tem um tipo de dados diferente do parâmetro correspondente, uma conversão de restrição causará um erro em tempo de compilação se Option Strict estiver ativada.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. Você pode evitar o erro de tempo de compilação usando uma conversão de ampliação ou uma conversão explícita.You can avoid the compile-time error by using a widening conversion or an explicit conversion.

Os erros de conversão implícita de estreitamento são suprimidos no tempo de compilação para conversões dos elementos em uma coleção de For Each…Next para a variável de controle de loop.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. Isso ocorre mesmo se Option Strict estiver ativado.This occurs even if Option Strict is on. Para obter mais informações, consulte a seção "conversões estreitas" em para cada... Próxima instrução.For more information, see the "Narrowing Conversions" section in For Each...Next Statement.

Erros de associação tardiaLate Binding Errors

Um objeto tem associação tardia quando é atribuído a uma propriedade ou a um método de uma variável declarada como sendo do 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 obter mais informações, consulte ligação antecipada e tardia.For more information, see Early and Late Binding.

Erros de tipo de objeto implícitoImplicit Object Type Errors

Erros de tipo de objeto implícitos ocorrem quando um tipo apropriado não pode ser inferido de uma variável declarada, portanto, um tipo de Object é inferido.Implicit object type errors occur when an appropriate type cannot be inferred for a declared variable, so a type of Object is inferred. Isso ocorre principalmente quando você usa uma instrução Dim para declarar uma variável sem usar uma cláusula As e Option Infer está desativado.This primarily occurs when you use a Dim statement to declare a variable without using an As clause, and Option Infer is off. Para obter mais informações, consulte instrução Option Infer e a especificação da linguagem Visual Basic.For more information, see Option Infer Statement and the Visual Basic Language Specification.

Para parâmetros de método, a cláusula As é opcional se Option Strict estiver desativado.For method parameters, the As clause is optional if Option Strict is off. No entanto, se qualquer parâmetro usar uma cláusula As, todos eles deverão usá-la.However, if any one parameter uses an As clause, they all must use it. Se Option Strict for on, a cláusula As será necessária para cada definição de parâmetro.If Option Strict is on, the As clause is required for every parameter definition.

Se você declarar uma variável sem usar uma cláusula As e defini-la como Nothing, a variável terá um 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. Nenhum erro de tempo de compilação ocorre nesse caso quando Option Strict está ativado e Option Infer está ativado.No compile-time error occurs in this case when Option Strict is on and Option Infer is on. Um exemplo disso é Dim something = Nothing.An example of this is Dim something = Nothing.

Tipos de Dados e Valores PadrãoDefault Data Types and Values

A tabela a seguir descreve os resultados de várias combinações de especificando o tipo de dados e o inicializador em uma instrução Dim.The following table describes the results of various combinations of specifying the data type and initializer in a Dim Statement.

Tipo de dados especificado?Data type specified? Inicializador especificado?Initializer specified? ExemploExample ResultadoResult
NãoNo NãoNo Dim qty Se o Option Strict estiver desativado (padrão), a variável é definida como Nothing.If Option Strict is off (the default), the variable is set to Nothing.

Se Option Strict estiver ativado, ocorre um erro de tempo de compilação.If Option Strict is on, a compile-time error occurs.
NãoNo SimYes Dim qty = 5 Se Option Infer estiver ativado (padrão), a variável usa o tipo de dados do inicializador.If Option Infer is on (the default), the variable takes the data type of the initializer. Consulte inferência de tipo local.See Local Type Inference.

Se Option Infer estiver desativado e Option Strict estiver desativado, a variável usa o tipo de dados do Object.If Option Infer is off and Option Strict is off, the variable takes the data type of Object.

Se Option Infer estiver desativado e Option Strict estiver ativado, ocorre um erro de tempo de compilação.If Option Infer is off and Option Strict is on, a compile-time error occurs.
SimYes NãoNo Dim qty As Integer A variável é inicializada para o valor padrão para o tipo de dados.The variable is initialized to the default value for the data type. Para obter mais informações, consulte instrução Dim.For more information, see Dim Statement.
SimYes SimYes Dim qty As Integer = 5 Se o tipo de dados do inicializador não for conversível para o tipo de dados especificado, ocorrerá um erro de tempo de compilação.If the data type of the initializer is not convertible to the specified data type, a compile-time error occurs.

Quando uma instrução Option Strict não está presenteWhen an Option Strict Statement Is Not Present

Se o código-fonte não contiver uma instrução Option Strict, a opção de configuração estrita na página compilar, designer de projeto (Visual Basic) será usada.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. A página de compilação tem configurações que fornecem controle adicional sobre as condições que geram um erro.The Compile Page has settings that provide additional control over the conditions that generate an error.

Se você estiver usando o compilador de linha de comando, poderá usar a opção de compilador -optionstrict para especificar uma configuração 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 definir Option Strict no IDETo set Option Strict in the IDE

Observação

Seu computador pode mostrar diferentes nomes ou locais para alguns dos elementos de interface do usuário do Visual Studio nas instruções a seguir.Your computer might show different names or locations for some of the Visual Studio user interface elements in the following instructions. A edição do Visual Studio que você possui e as configurações que você usa determinam esses elementos.The Visual Studio edition that you have and the settings that you use determine these elements. Para obter mais informações, consulte Personalizando o IDE.For more information, see Personalizing the IDE.

  1. No Gerenciador de Soluções, selecione um projeto.In Solution Explorer, select a project. No menu Projeto, clique em Propriedades.On the Project menu, click Properties.

  2. Na guia Compilar , defina o valor na caixa opção estrita .On the Compile tab, set the value in the Option Strict box.

Para definir as configurações de aviso no IDETo set warning configurations in the IDE

Quando você usa a página compilar, o designer de projeto (Visual Basic) em vez de uma instrução Option Strict, você tem controle adicional sobre as condições que geram erros.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. A seção configurações de aviso da página compilar tem configurações que correspondem às três condições que causam um erro de tempo de compilação quando Option Strict está ativada.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. A seguir estão estas configurações:Following are these settings:

  • Conversão implícitaImplicit conversion

  • Associação tardia; a chamada poderia falhar no tempo de execuçãoLate binding; call could fail at run time

  • Tipo implícito; objeto assumidoImplicit type; object assumed

Quando você define Opção Estrita como Ativada, todas estas três definições de configuração de aviso são definidas como Erro.When you set Option Strict to On, all three of these warning configuration settings are set to Error. Quando você define Opção Estrita como Desativada, todas as três configurações são definidas como Nenhum.When you set Option Strict to Off, all three settings are set to None.

Você pode alterar individualmente cada definição de configuração de aviso como Nenhum, Aviso ou Erro.You can individually change each warning configuration setting to None, Warning, or Error. Se todas as três definições de configuração de aviso estiverem definidas como Erro, On aparecerá na caixa Option strict.If all three warning configuration settings are set to Error, On appears in the Option strict box. Se todas as três estiverem definidas como Nenhum, Off será exibido nessa caixa.If all three are set to None, Off appears in this box. Para qualquer outra combinação dessas configurações, (personalizado) será exibido.For any other combination of these settings, (custom) appears.

Para definir a opção de configuração padrão estrita para novos projetosTo set the Option Strict default setting for new projects

Quando você cria um projeto, a opção configuração estrita na guia Compilar é definida como a opção configuração estrita na caixa de diálogo Opções .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 definir Option Strict nessa caixa de diálogo, no menu ferramentas , clique em Opções.To set Option Strict in this dialog box, on the Tools menu, click Options. Na caixa de diálogo Opções, expanda Projetos e Soluções e, em seguida, clique em Padrões de VB.In the Options dialog box, expand Projects and Solutions, and then click VB Defaults. A configuração padrão inicial em padrões do VB é Off.The initial default setting in VB Defaults is Off.

Para definir Option Strict na linha de comandoTo set Option Strict on the command line

Inclua a opção de compilador -optionstrict no comando Vbc .Include the -optionstrict compiler option in the vbc command.

ExemploExample

Os exemplos a seguir demonstram erros de tempo de compilação causados por conversões implícitas de tipo que são conversões redutoras.The following examples demonstrate compile-time errors caused by implicit type conversions that are narrowing conversions. Essa categoria de erros corresponde à condição de conversão implícita na página de compilação.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

ExemploExample

O exemplo a seguir demonstra um erro de tempo de compilação causado pela associação tardia.The following example demonstrates a compile-time error caused by late binding. Essa categoria de erros corresponde à associação tardia; a chamada pode falhar em condição de tempo de execução na página de compilação.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

ExemploExample

Os exemplos a seguir demonstram erros causados por variáveis que são declaradas com um tipo implícito de Object.The following examples demonstrate errors caused by variables that are declared with an implicit type of Object. Essa categoria de erros corresponde ao tipo implícito; objeto assumido condição na página de compilação.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

Consulte tambémSee also