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 entreObject
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.
No Gerenciador de Soluções, selecione um projeto. No menu Projeto, clique em Propriedades.
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
- Ampliando e estreitando conversões
- Conversões implícitas e explícitas
- Página de compilação, Project Designer (Visual Basic)
- Declaração explícita da opção
- Funções de conversão de tipo
- Como: Acessar membros de um objeto
- Expressões incorporadas em XML
- Conversão descontraída de delegados
- Vinculação tardia em soluções do Office
- -opçãoestrito
- Caixa de diálogo Padrões, Projetos, Opções do Visual Basic