Instrução Option Infer
Permite o uso de inferência de tipo local ao declarar variáveis.
Option Infer { On | Off }
Partes
Termo |
Definição |
On |
Opcional. Permite inferência de tipo local. |
Off |
Opcional. Desabilita inferência de tipo local. |
Comentários
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 para Option Infer em um arquivo entrar em conflito com o valor definido no IDE ou na linha de comando, o valor no arquivo possui precedência.
Quando você define Option Infer para On, você pode declarar variáveis locais sem especificar explicitamente um tipo de dados. O compilador infere o tipo de dados de uma variável 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.
IntelliSense quando o Option Infer está ligado
Na ilustração a seguir, o Option Infer está desativado. A variável na declaração Dim someVar = 2 é declarada como um Object por inferência de tipo. Neste exemplo, a configuração Opção Estrita está definida como Desligada no Página de Compilação, Designer de Projeto (Visual Basic).
IntelliSense quando o Option Infer está desligado
Dica
Quando uma variável é declarada como um Object, o tipo de tempo de execução pode ser alterado enquanto o programa está sendo executado.Visual Basic executa operações denominadas boxing e unboxing para converter entre um Object e um tipo de valor, que torna a execução mais lenta.Para obter informações sobre a boxing e unboxing, consulte o Especificação da linguagem Visual Basic.
A inferência de tipo aplica-se no nível do procedimento e não fora de um procedimento em uma classe, estrutura, módulo ou interface.
Para obter mais informações, consulte: Inferência de tipo local (Visual Basic).
Quando uma Instrução Option Infer Não Está Presente
Se o código-fonte não tiver uma instrução Option Infer, a configuração Option Infer no Página de Compilação, Designer de Projeto (Visual Basic) é usada. Se o compilador de linha de comando for usado, a opção do compilador /optioninfer é usada.
Para definir o Option Infer no IDE
No Gerenciador de Soluções, selecione um projeto. No menu Projeto, clique em Propriedades. Para obter mais informações, consulte Introduction to the Project Designer.
Clique na guia Compilar.
Defina o valor na caixa Option infer.
Ao criar um novo projeto, a configuração Option Infer na guia Compilar é definida para a configuração Option Infer na caixa de diálogo Padrões de VB. Para acessar a caixa de diálogo Padrões de VB, 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 de VB é On.
Para definir o Option Infer na linha de comando
- Inclui a opção do 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 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 (Visual Basic). 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 (Visual Basic). |
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. |
Exemplo
Os exemplos a seguir demonstram como a instrução Option Infer habilita a inferência de 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
O exemplo a seguir demonstra o tipo de tempo de execução pode ser diferente quando uma variável é identificada como um Object.
' 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
Consulte também
Referência
Instrução Option Explicit (Visual Basic)
Caixa de diálogo Padrões do Visual Basic, Projetos, Opções
Conversões boxing e unboxing (Guia de Programação em C#)