Compartilhar via


Inferência de tipo de local (Visual Basic)

O compilador Visual Basic usa inferência de tipo para determinar os tipos de dados de variáveis locais declarados sem um As cláusula.O compilador infere o tipo da variável do tipo da expressão de inicialização.Isso permite que você declarar variáveis sem explicitamente indicando um tipo, conforme mostrado no exemplo a seguir. Como resultado de declarações de, ambos num1 e num2 tem rigidez de tipos como inteiros.

Public Sub inferenceExample()

    ' Using explicit typing.
    Dim num1 As Integer = 3

    ' Using local type inference.
    Dim num2 = 3

End Sub
ObservaçãoObservação

Se você não quiser num2 no exemplo anterior para ser digitadas como um Integer, você pode especificar outro tipo, usando uma declaração como Dim num3 As Object = 3 ou Dim num4 As Double = 3.

Inferência de tipo local aplica-se no nível de procedimento.Ele não pode ser usado para declarar variáveis no nível de módulo (dentro de uma classe, estrutura, módulo ou interface mas não em um procedimento ou bloco).Se num2 no exemplo anterior foram um campo de uma classe em vez de uma variável local em um procedimento, a declaração poderia causar um erro com Option Strict e seria classificar num2 como um Object com Option Strict logoff.Da mesma forma, a inferência de tipo local não se aplica a variáveis de nível de procedimento declaradas como Static.

Digite inferência vs.Ligação tardia

Código que usa inferência se parece com o código que depende de ligação tardia.No entanto, inferência de tipos a variável em vez de deixá-la como altamente Object.O compilador usa o inicializador de uma variável para determinar o tipo da variável em tempo de compilação para produzir código early-bound.No exemplo anterior, num2, like num1, é digitada como uma Integer.

O comportamento de variáveis early-bound difere das variáveis de ligação tardia, para o qual o tipo é conhecido somente em tempo de execução.Saber o tipo mais cedo, permite que o compilador identificar problemas antes da execução, alocar memória com precisão e executar outras otimizações.Vinculação antecipada também permite que o ambiente de desenvolvimento integrado (IDE) para fornecer ajuda de IntelliSense sobre os membros de um objeto Visual Basic.Vinculação antecipada também é preferida para o desempenho.Isso ocorre porque todos os dados armazenados em uma variável de ligação tardia devem ser dispostos como tipo de Object, e acessar os membros do tipo em tempo de execução faz com que o programa mais lento.

Exemplos

Inferência de tipo ocorre quando uma variável local é declarada sem uma As cláusula e inicializado.O compilador usa o tipo do valor inicial atribuído como o tipo da variável.Por exemplo, cada uma das linhas de código a seguir declara uma variável do tipo String.

' Using explicit typing.
Dim name1 As String = "Springfield"

' Using local type inference.
Dim name2 = "Springfield"

O código a seguir demonstra duas formas equivalentes para criar uma matriz de inteiros.

' Using explicit typing.
Dim someNumbers1() As Integer = New Integer() {4, 18, 11, 9, 8, 0, 5}

' Using local type inference.
Dim someNumbers2 = New Integer() {4, 18, 11, 9, 8, 0, 5}

É conveniente usar inferência de tipo para determinar o tipo de uma variável de controle de loop.No código a seguir, o compilador infere que number é um Integer porque someNumbers2 do exemplo anterior é uma matriz de inteiros.

Dim total = 0
For Each number In someNumbers2
    total += number
Next

Inferência de tipo local pode ser usada em Using instruções para estabelecer o tipo de nome do recurso, como o exemplo a seguir demonstra.

Using proc = New System.Diagnostics.Process
    ' Insert code to work with the resource.
End Using

O tipo de uma variável pode ser deduzido dos valores retornados de funções, como o exemplo a seguir demonstra.Ambos pList1 e pList2 são matrizes de processos, pois Process.GetProcesses retorna uma matriz de processos.

' Using explicit typing.
Dim pList1() As Process = Process.GetProcesses()

' Using local type inference.
Dim pList2 = Process.GetProcesses()

Option Infer

Option Inferque permite que especificar se a inferência de tipo local é permitida em um arquivo em particular.Para permitir ou bloquear a opção, digite uma das instruções a seguir no início do arquivo.

Option Infer On

Option Infer Off

Se você não especificar um valor para Option Infer no seu código, o padrão do compilador é Option Infer On.Para projetos atualizados a partir de Visual Basic 2008 ou versões anteriores, o padrão do compilador é Option Infer Off.

Se o valor definido para Option Inferem um arquivo conflita com o valor definido no IDE ou na linha de comando, o valor no arquivo possui precedência.

Para obter mais informações, consulte Declaração de Option Infer e Compilar página Project Designer (Visual Basic).

Restrições

Inferência de tipo pode ser usada somente para as variáveis locais não-static; ele não pode ser usado para determinar o tipo de funções, propriedades ou campos de classe.

Consulte também

Referência

Para cada...Próxima instrução (Visual Basic)

Para...Próxima instrução (Visual Basic)

Declaração de Option Infer

/optioninfer

Conceitos

Tipos anônimos (Visual Basic)

(Visual Basic) de vinculação antecipada e atrasada

Introdução ao LINQ em Visual Basic