Declaração de inferência de opção
Permite o uso de inferência de tipo local na declaração de variáveis.
Sintaxe
Option Infer { On | Off }
Partes
Termo | Definição |
---|---|
On |
Opcional. Permite a inferência de tipo local. |
Off |
Opcional. Desabilita a inferência de tipo local. |
Observações
Para definir Option Infer
em um arquivo, digite Option Infer On
ou Option Infer Off
na parte superior do arquivo, antes de qualquer outro código-fonte. Se o valor definido em Option Infer
um arquivo entrar em conflito com o valor definido no IDE ou na linha de comando, o valor no arquivo terá precedência.
Ao definir Option Infer
como On
, você pode declarar variáveis locais sem declarar explicitamente um tipo de dados. O compilador infere o tipo de dados de uma variável a partir do tipo de sua expressão de inicialização.
Na ilustração a seguir, Option Infer
está ativado. A variável na declaração Dim someVar = 2
é declarada como um inteiro por inferência de tipo.
A captura de tela a seguir mostra o IntelliSense quando a opção Infer está ativada:
Na ilustração a seguir, Option Infer
está desativado. A variável na declaração Dim someVar = 2
é declarada como uma Object
inferência por tipo. Neste exemplo, a configuração Opção estrita é definida como Desativado na página de compilação, Project Designer (Visual Basic).
A captura de tela a seguir mostra o IntelliSense quando a opção Infer está desativada:
Nota
Quando uma variável é declarada como um Object
, o tipo de tempo de execução pode mudar enquanto o programa está em execução. Visual Basic executa operações chamadas boxing e unboxing para converter entre um Object
e um tipo de valor, o que torna a execução mais lenta. Para obter informações sobre boxe e unboxing, consulte a Especificação de linguagem do Visual Basic.
A inferência de tipo se aplica no nível do procedimento e não se aplica fora de um procedimento em uma classe, estrutura, módulo ou interface.
Para obter informações adicionais, consulte Inferência de tipo local.
Quando uma instrução Option Infer não está presente
Se o código-fonte não contiver uma Option Infer
instrução, a configuração Option Infer na página de compilação, Project Designer (Visual Basic) será usada. Se o compilador de linha de comando for usado, a opção de compilador -optioninfer será usada.
Para definir Option Infer no IDE
No Gerenciador de Soluções, selecione um projeto. No menu Projeto, clique em Propriedades.
Clique na guia Compilar .
Defina o valor na caixa Inferir opção.
Quando você cria um novo projeto, a configuração Option Infer na guia Compilar é definida como a configuração Option Infer na caixa de diálogo VB Defaults . Para acessar a caixa de diálogo Padrões do VB, 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 é On
.
Para definir Option Infer na linha de comando
Inclua a opção de compilador -optioninfer no comando vbc .
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 Dim
instrução.
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. |
Exemplo 1
Os exemplos a seguir demonstram como a instrução permite a inferência de Option Infer
tipo local.
' Enable Option Infer before trying these examples.
' Variable num is an Integer.
Dim num = 5
' Variable dbl is a Double.
Dim dbl = 4.113
' Variable str is a String.
Dim str = "abc"
' Variable pList is an array of Process objects.
Dim pList = Process.GetProcesses()
' Variable i is an Integer.
For i = 1 To 10
Console.WriteLine(i)
Next
' Variable item is a string.
Dim lst As New List(Of String) From {"abc", "def", "ghi"}
For Each item In lst
Console.WriteLine(item)
Next
' Variable namedCust is an instance of the Customer class.
Dim namedCust = New Customer With {.Name = "Blue Yonder Airlines",
.City = "Snoqualmie"}
' Variable product is an instance of an anonymous type.
Dim product = New With {Key .Name = "paperclips", .Price = 1.29}
' If customers is a collection of Customer objects in the following
' query, the inferred type of cust is Customer, and the inferred type
' of custs is IEnumerable(Of Customer).
Dim custs = From cust In customers
Where cust.City = "Seattle"
Select cust.Name, cust.ID
Exemplo 2
O exemplo a seguir demonstra que o tipo de tempo de execução pode diferir quando uma variável é identificada como um Object
arquivo .
' Disable Option Infer when trying this example.
Dim someVar = 5
Console.WriteLine(someVar.GetType.ToString)
' If Option Infer is instead enabled, the following
' statement causes a run-time error. This is because
' someVar was implicitly defined as an integer.
someVar = "abc"
Console.WriteLine(someVar.GetType.ToString)
' Output:
' System.Int32
' System.String