Partilhar via


Declaração Estrita de Opção

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

Sintaxe

Option Strict { On | Off }

Partes

Termo Definição
On Opcional. Permite Option Strict a verificação.
Off Opcional. Desabilita a Option Strict verificação.

Observações

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

  • Conversões de estreitamento implícitas

  • Vinculação tardia

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

Nota

Nas configurações de aviso que você pode definir na página de compilação, Project Designer (Visual Basic), há três configurações que correspondem às três condições que causam um erro em 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 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. A Option Strict On instrução 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.

Se usada, a Option Strict instrução 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 usando inferência de tipo local. Recomenda-se especificar tipos de dados para todos os elementos de programação, pelos seguintes motivos:

  • Ele permite o suporte ao IntelliSense para suas variáveis e parâmetros. Isso permite que você veja suas propriedades e outros membros à medida que digita o 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 para métodos em objetos que não oferecem suporte a esses métodos.

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

Erros de conversão de estreitamento implícito

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

Visual Basic pode converter muitos tipos de dados para outros tipos de dados. A perda de dados pode ocorrer quando o valor de um tipo de dados é convertido em um tipo de dados com menos precisão ou menor capacidade. Um erro em tempo de execução ocorre se essa conversão de estreitamento falhar. Option Strict Garante a notificação em tempo de compilação dessas conversões restritas para que você possa evitá-las. Para obter mais informações, consulte Conversões implícitas e explícitas e Ampliando e restringindo conversões.

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

Quando você concatena cadeias de caracteres usando o operador Ads, todas as conversões para as cadeias de caracteres são consideradas como ampliação. Portanto, essas conversões não geram um erro de conversão de estreitamento implícito, 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 estreitamento causa um erro em tempo de compilação se Option Strict estiver ativado. Você pode evitar o erro em tempo de compilação usando uma conversão de ampliação ou uma conversão explícita.

Os erros de conversão de estreitamento implícito 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 que Option Strict esteja ativado. Para obter mais informações, consulte a seção "Estreitando conversões" em Para cada um... Próxima declaração.

Erros de vinculação tardia

Um objeto é vinculado 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 Vinculaçã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 Instrução de inferência de opção e a Especificação de linguagem do Visual Basic.

Para parâmetros de método, a As cláusula é opcional se Option Strict estiver desativada. No entanto, se qualquer parâmetro usar uma As cláusula, todos eles devem usá-la. Se Option Strict estiver ativada, a cláusula é necessária para cada definição de As 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 em tempo de compilação ocorre neste caso quando Option Strict está ligado e Option Infer está ligado. Um exemplo disso é Dim something = Nothing.

Tipos de dados e valores 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 Result
No 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 em tempo de compilação.
Não Sim Dim qty = 5 Se Option Infer estiver ativado (o padrão), a variável usará o tipo de dados do inicializador. Consulte Inferência de tipo local.

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

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

Quando uma declaração estrita de opção não está presente

Se o código-fonte não contiver uma Option Strict instrução, a configuração estrita Opção na página de compilação, Project Designer (Visual Basic) será usada. A página de compilação 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 de compilador -optionstrict para especificar uma configuração para Option Strict.

Para definir a opção Strict no IDE

Nota

Seu computador pode mostrar nomes ou locais diferentes para alguns dos elementos da 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. No 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

Quando você usa a página de compilação, Project Designer (Visual Basic) em vez de uma Option Strict instrução, você tem controle adicional sobre as condições que geram erros. A seção Configurações de aviso da página de compilação tem configurações que correspondem às três condições que causam um erro em tempo de compilação quando Option Strict está ativado. Seguem-se estas definições:

  • Conversão implícita

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

  • Tipo implícito; objeto assumido

Quando você define Opção Estrita como Ativado, todas essas três definições de configuração de aviso são definidas como Erro. Quando você define Opção Estrita como Desativado, 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 definições de configuração de aviso estiverem definidas como Erro, On aparecerá na Option strict caixa. Se todos os três estiverem definidos como Nenhum, Off aparecerá 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 essa 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 VB. A configuração padrão inicial em VB Defaults é Off.

Para definir Opção Estrita na linha de comando

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

Exemplo 1

Os exemplos a seguir demonstram erros em tempo de compilação causados por conversões de tipo implícitas que estão restringindo conversões. Esta categoria de erros corresponde à condição de conversão implícita na página de compilação.

' 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 em tempo de compilação causado pela vinculação tardia. Esta categoria de erros corresponde à vinculação tardia, a chamada pode falhar na condição de tempo de execução na página de compilação.

' 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 que são declaradas com um tipo implícito de Object. Esta categoria de erros corresponde à condição Implicit type; object assumed na 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ém