Compartilhar via


Instrução Opção Estrita

Restringe conversões de tipo de dados implícitos para apenas conversões de ampliação, não permite associação tardia e não permite digitação implícita que resulta em um Object tipo.

Sintaxe

Option Strict { On | Off }

Partes

Prazo Definição
On Opcional. Habilita a Option Strict verificação.
Off Opcional. Desabilita Option Strict a verificação.

Observações

Quando Option Strict On ou Option Strict aparece em um arquivo, as seguintes condições causam um erro de tempo de compilação:

  • Conversões de estreitamento implícitas

  • Associação tardia

  • Digitação implícita que resulta em um Object tipo

Observação

Nas configurações de aviso que você pode definir na página Compilar, 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. Para obter informações sobre como usar essas configurações, consulte Para definir configurações de aviso no IDE mais adiante neste tópico.

A Option Strict Off instrução desativa a verificação de erro e aviso para todas as três condições, mesmo que as configurações de IDE associadas especifiquem ativar esses erros ou avisos. A Option Strict On instrução ativa a verificação de erro e aviso para todas as três condições, mesmo que as configurações de IDE associadas especifiquem desativar esses erros ou avisos.

Se usada, a instrução Option Strict deve aparecer antes de qualquer outra instrução de código em um arquivo.

Quando você define Option Strict como On, o Visual Basic verifica se os tipos de dados são especificados para todos os elementos de programação. Os tipos de dados podem ser especificados explicitamente ou especificados usando inferência de tipo local. É recomendável especificar tipos de dados para todos os elementos de programação pelos seguintes motivos:

  • Ele habilita o suporte do IntelliSense para suas variáveis e parâmetros. Isso permite que você veja suas propriedades e outros membros ao digitar código.

  • Ele permite que o compilador execute a verificação de tipo. A verificação de tipo ajuda você a encontrar instruções que podem falhar em tempo de execução devido a erros de conversão de tipo. Ele também identifica chamadas a métodos em objetos que não dão suporte a esses métodos.

  • Ele acelera a execução do código. Um motivo para isso é que, se você não especificar um tipo de dados para um elemento de programação, o compilador do Visual Basic atribuirá o tipo a Object ele. O código compilado pode ter que converter Object entre e outros tipos de dados, o que reduz o desempenho.

Erros de conversão de estreitamento implícito

Erros de conversão de restrição implícita ocorrem quando há uma conversão de tipo de dados implícita que é uma conversão de estreitamento.

O Visual Basic pode converter muitos tipos de dados em outros tipos de dados. 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. Ocorrerá um erro em tempo de execução se essa conversão de restrição falhar. Option Strict garante a notificação em tempo de compilação dessas conversões de restrição para que você possa evitá-las. Para obter mais informações, consulte Conversões implícitas e explícitas e conversões de ampliação e estreitamento.

As conversões que podem causar erros incluem conversões implícitas que ocorrem em expressões. Para obter mais informações, consulte os seguintes tópicos:

Quando você concatena cadeias de caracteres usando o operador & , todas as conversões nas cadeias de caracteres são consideradas ampliadas. Portanto, essas conversões não geram um erro de conversão de restrição implícita, mesmo que Option Strict esteja ativado.

Quando você chama um método que tem um argumento que tem um tipo de dados diferente do parâmetro correspondente, uma conversão de restrição causa um erro de tempo de compilação se Option Strict estiver ativado. Você pode evitar o erro de tempo de compilação usando uma conversão de ampliação ou uma conversão explícita.

Erros de conversão de restrição implícita são suprimidos em tempo de compilação para conversões dos elementos em uma For Each…Next coleção para a variável de controle de loop. Isso ocorre mesmo se Option Strict estiver ativado. Para obter mais informações, consulte a seção "Limitando conversões" em For Each... Próxima instrução.

Erros de associação tardia

Um objeto é associado tardiamente quando é atribuído a uma propriedade ou método de uma variável que é declarada como do tipo Object. Para obter mais informações, consulte Associação Antecipada e Tardia.

Erros de tipo de objeto implícito

Erros de tipo de objeto implícito ocorrem quando um tipo apropriado não pode ser inferido para uma variável declarada, portanto, um tipo de Object é inferido. Isso ocorre principalmente quando você usa uma Dim instrução para declarar uma variável sem usar uma As cláusula e Option Infer está desativado. Para obter mais informações, consulte a Instrução Option Infer e a Especificação de Linguagem do Visual Basic.

Para parâmetros de método, a As cláusula será opcional se Option Strict estiver desativada. No entanto, se qualquer parâmetro usar uma As cláusula, todos eles deverão usá-la. Se Option Strict estiver ativado, a As cláusula será necessária para cada definição de parâmetro.

Se você declarar uma variável sem usar uma As cláusula e defini-la como Nothing, a variável terá um tipo de Object. Nenhum erro de tempo de compilação ocorre nesse caso quando Option Strict está ativado e Option Infer ativado. Um exemplo disso é Dim something = Nothing.

Tipos e valores de dados padrão

A tabela a seguir descreve os resultados de várias combinações de especificação do tipo de dados e do inicializador em uma Instrução Dim.

Tipo de dados especificado? Inicializador especificado? Exemplo Resultado
Não Não Dim qty Se Option Strict estiver desativado (o padrão), a variável será definida como Nothing.

Se Option Strict estiver ativado, ocorrerá um erro de tempo de compilação.
Não Yes Dim qty = 5 Se Option Infer estiver ativada (o padrão), a variável usará o tipo de dados do inicializador. Consulte a inferência de tipo local.

Se Option Infer estiver desativado e Option Strict estiver desativado, a variável usará o tipo de dados de Object.

Se Option Infer estiver desativado e Option Strict estiver ativado, ocorrerá um erro de tempo de compilação.
Yes Não Dim qty As Integer A variável é inicializada para o valor padrão do tipo de dados. Para obter mais informações, consulte Dim Statement.
Yes Yes 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.

Quando uma instrução strict de opção não está presente

Se o código-fonte não contiver uma instrução Option Strict , a configuração opção estrita na página Compilar, o Designer de Projeto (Visual Basic) será usado. A página Compilar tem configurações que fornecem controle adicional sobre as condições que geram um erro.

Se você estiver usando o compilador de linha de comando, poderá usar a opção do compilador -optionstrict para especificar uma configuração para Option Strict.

Para definir a opção estrito no IDE

Observação

Seu computador pode mostrar nomes ou locais diferentes para alguns dos elementos de interface do usuário do Visual Studio nas instruções a seguir. A edição do Visual Studio que você tem e as configurações que você usa determinam esses elementos. Para obter mais informações, consulte Personalizando o IDE.

  1. Em do Gerenciador de Soluções, selecione um projeto. No menu Projeto, clique em Propriedades.

  2. Na guia Compilar , defina o valor na caixa Opção Estrita .

Para definir configurações de aviso no IDE

Ao usar a Página compilar, o Designer de Projeto (Visual Basic) em vez de uma instrução Option Strict , você terá controle adicional sobre as condições que geram erros. 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 em tempo de compilação quando Option Strict estiver ativada. Estas são as seguintes configurações:

  • Conversão implícita

  • Associação tardia; a chamada pode falhar em tempo de execução

  • Tipo implícito; objeto assumido

Quando você define a opção Estrito como Ativada, todas essas três configurações de aviso são definidas como Erro. Quando você define Option Strict como Off, todas as três configurações são definidas como Nenhuma.

Você pode alterar individualmente cada configuração de aviso para Nenhum, Aviso ou Erro. Se todas as três configurações de aviso estiverem definidas como Erro, On será exibida na Option strict caixa. Se todos os três estiverem definidos como Nenhum, Off será exibido nesta caixa. Para qualquer outra combinação dessas configurações, (personalizado) é exibido.

Para definir a configuração padrão Opção Estrita para novos projetos

Quando você cria um projeto, a configuração Opção Estrita na guia Compilar é definida como a configuração Opção Estrita na caixa de diálogo Opções .

Para definir Option Strict nesta caixa de diálogo, no menu Ferramentas , clique em Opções. Na caixa de diálogo Opções , expanda Projetos e Soluções e clique em Padrões do VB. A configuração padrão inicial em Padrões de VB é Off.

Para definir a opção estrito na linha de comando

Inclua a opção do compilador -optionstrict no comando vbc .

Exemplo 1

Os exemplos a seguir demonstram erros de tempo de compilação causados por conversões de tipo implícitas que estão restringindo conversões. Essa categoria de erros corresponde à condição de conversão implícita na 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

Exemplo 2

O exemplo a seguir demonstra um erro de tempo de compilação causado pela associação tardia. Essa categoria de erros corresponde à associação Tardia; a chamada pode falhar na condição de tempo de execução na Página compilar.

' 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

Exemplo 3

Os exemplos a seguir demonstram erros causados por variáveis declaradas com um tipo implícito de Object. Essa categoria de erros corresponde ao tipo implícito; a condição assumida pelo objeto na Página compilar.

' 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ém