Instrução Option Strict

Restringe as conversões de tipo de dados implícitas a somente conversões de expansão, não permite associação tardia e não permite digitação implícita que resulte em um tipo Object.

Sintaxe

Option Strict { On | Off }

Partes

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

Comentários

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

  • 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 Compilar, Designer de Projeto (Visual Basic), existem 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, confira Para definir configurações de aviso no IDE mais adiante neste tópico.

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

Se usada, a instrução Option Strict deve ser exibida antes de quaisquer outras instruções de código em um arquivo.

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

  • Habilita o suporte do IntelliSense para as variáveis e os parâmetros. Permite que você veja as propriedades e outros membros ao digitar o código.

  • Permite que o compilador execute a verificação de tipo. A verificação de tipo ajuda a encontrar as instruções que podem falhar no tempo de execução, devido a erros de conversão de tipo. Também identifica as chamadas a métodos nos objetos que não são compatíveis com esses métodos.

  • Acelera a execução do código. Isso ocorre porque, se você não especificar um tipo de dados para um elemento de programação, o compilador do Visual Basic atribuirá a ele o tipo Object. O código compilado pode ter que alternar a conversão entre Object e outros tipos de dados, o que 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.

O Visual Basic pode converter muitos tipos de dados em outros tipos de dados. Pode ocorrer uma perda de dados, quando o valor de um tipo de dados é convertido em um tipo de dados com menos precisão ou com menor capacidade. Ocorrerá um erro em tempo de execução, se essa conversão de restrição falhar. Option Strict garante a notificação do tempo de compilação dessas conversões de restrição para que você possa evitá-las. Para obter mais informações, confira Conversões Implícitas e Explícitas e Conversões de Expansão e de Restrição.

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

Quando você concatena as cadeias de caracteres usando o Operador &, todas as conversões nas cadeias de caracteres são consideradas de expansão. 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 com um tipo de dados diferente do parâmetro correspondente, uma conversão de restrição 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 expansão ou uma conversão explícita.

Os 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 de For Each…Next para a variável de controle de loop. Isso ocorre mesmo que Option Strict esteja ativado. Para obter mais informações, confira a seção "Conversões de Restrição" em Para cada... 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, confira 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, confira Instrução Option Infer e a Especificação de Linguagem do Visual Basic.

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

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. Nenhum erro em tempo de compilação ocorre nesse caso, quando Option Strict está ativado e Option Infer está ativado. Um exemplo disso é o Dim something = Nothing.

Tipos de Dados e Valores Padrão

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

Tipo de dados especificado? Inicializador especificado? Exemplo Result
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.
No Yes Dim qty = 5 Se Option Infer estiver ativado (padrão), a variável usa o tipo de dados do inicializador. Confira Inferência de tipo de variável 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, confira 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 contiver uma instruçãoOption Strict, será usada a configuração de Option Strict em Compilar Página, Designer de Projeto (Visual Basic). A Página Compilar tem as configurações que fornecem controle adicional sobre as condições que geram um erro.

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

Para definir Option Strict 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, modifique o valor na caixa Option Strict.

Para definir configurações de aviso no IDE

Quando você usa a Página Compilar, Designer de Projeto (Visual Basic), em vez de uma instrução Option Strict, você tem controle adicional sobre as condições que geram erros. A seção Configurações de aviso da Página Compilar tem as configurações que correspondem às três condições que causam um erro em tempo de compilação, quando 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 caixa Option strict. Se todas as três estiverem definidas como Nenhum, Off será exibido nessa caixa. Para qualquer outra combinação dessas configurações, (personalizado) será exibido.

Para definir a configuração padrão de Option Strict para novos projetos

Ao criar um projeto, a configuração de Option Strict na guia Compilar é definida como a configuração Option Strict 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, em seguida, clique em Padrões de VB. A configuração inicial padrão nos Padrões do VB é Off.

Para definir Option Strict na linha de comando

Inclua a opção do 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ícito que restringem as conversões. Essa categoria de erros corresponde à condição 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 em tempo de compilação causado pela associação tardia. Essa categoria de erros corresponde à condição Associação tardia; a chamada pode falhar em 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 os erros causados por variáveis declaradas com um tipo implícito de Object. Essa categoria de erros corresponde à condição Conversão implícita; objeto pressuposto 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

Confira também