Instrução Option Strict

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

Syntax

Option Strict { On | Off }

Partes

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

Comentários

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

  • Conversões de estreitamento implícitas

  • Associação tardia

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

Observação

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 de tempo de compilação. Para obter informações sobre como usar essas configurações, consulte Para definir configurações de aviso no IDE posteriormente neste tópico.

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

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

Quando você define Option Strict como , Visual Basic verifica se os tipos de dados são On especificados para todos os elementos de programação. Os tipos de dados podem ser especificados explicitamente ou especificados usando a inferência de tipo local. É recomendável especificar tipos de dados para todos os seus 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 conforme 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 operação devido a erros de conversão de tipo. Ele também identifica chamadas para métodos em objetos que não são suportados por 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 Visual Basic compilador atribuirá a ele o Object tipo . O código compilado pode ter que converter entre e outros tipos de dados, o que Object reduz o desempenho.

Erros de conversão de restrição implícita

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.

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 run time 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 restrição.

Conversões que podem causar erros incluem conversões implícitas que ocorrem em expressões. Para obter mais informações, consulte estes 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 estreitamento implícito, mesmo Option Strict se estiver on.

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 causará um erro de tempo de compilação Option Strict se estiver. 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 coleção para a For Each…Next variável de controle de loop. Isso ocorre mesmo se Option Strict estiver on. Para obter mais informações, consulte a seção "Conversões de restrição" em For Each... Próxima instrução.

Erros de associação tardia

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. Para obter mais informações, consulte Associação antecipada e tardia.

Erros de tipo de objeto implícito

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. 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. Para obter mais informações, consulte instrução Option Infer e o Visual Basic Language Specification.

Para parâmetros de método, As a cláusula será opcional se estiver Option Strict off. No entanto, se qualquer parâmetro usar uma As cláusula , todos eles deverão usá-la. Se Option Strict estiver, a cláusula As 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á em Option Infer e está. 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 especificar o tipo de dados e o inicializador em uma instrução Dim.

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

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

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

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

Quando uma instrução option strict não está presente

Se o código-fonte não contém uma instrução , a configuração Option strict na Option Strict 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 do compilador -optionstrict para especificar uma configuração para Option Strict .

Para definir a Opção Estrita no 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. A edição do Visual Studio que você possui 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 , de definido o valor na caixa Opção Estrita .

Para definir configurações de aviso no IDE

Ao usar a Página de Compilação, Project Designer (Visual Basic) em vez de uma instrução , você tem controle adicional sobre as condições que Option Strict 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 de tempo de compilação quando o Option Strict está ativado. A seguir estão estas configurações:

  • Conversão implícita

  • Associação tardia; a chamada poderia falhar no tempo de execução

  • Tipo implícito; objeto assumido

Quando você define Opção Estrita como Ativada, todas estas três definições de configuração de aviso são definidas como Erro. Quando você define Opção Estrita como Desativada, todas as três configurações são definidas como Nenhum.

Você pode alterar individualmente cada definição de configuração de aviso como 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) será exibido.

Para definir a opção de configuração padrão estrita para novos projetos

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 .

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

Para definir Option Strict na linha de comando

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

Exemplo 1

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. Essa 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 de tempo de compilação causado pela associação tardia. 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.

' 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 . Essa categoria de erros corresponde ao tipo implícito; objeto assumido condição na página de compilação.

' 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

Confira também