Compartilhar via


Inferência de tipo de variável local (Visual Basic)

O compilador em Visual Basic 2008 usa inferênciade 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, ambos num1 e num2 são fortemente tipadas como números 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 digitado 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óduloou interface mas não dentro de 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 desativado. Da mesma forma, a inferência de tipo local oferece não aplicar a variáveis de nível de procedimento declarado como Static.

Tipo Inferência vs.Ligação tardia

OCódigo inferência é semelhante ao código que depende de ligação tardia. No entanto, a inferência de tipo tipos altamente variável em vez de deixá-lo como Object. O compilador usa uma variáveldo inicializador para determinar o tipo da variávelem tempo de compilar para produzir mais cedo-códigolimite . No exemplo anterior, num2, como num1, é digitado como um Integer.

O comportamento do logo-variáveislimite é diferente daquele recentes-variáveislimite , para o qual o tipo é conhecido somente em tempo de execução. Saber o tipo de início, você permite que o compilador de identificar problemas antes da execução, alocar memória com precisão e realizar outras otimizações. Vinculação antecipada também permite que de desenvolvimento de Visual Basic integradas ao ambiente (IDE) para fornecer IntelliSense Ajuda sobre os membros de um objeto. Vinculação antecipada também é preferido para o desempenho. Isso ocorre porque todos os dados armazenados em uma tarde -limiteavariável deve ser disposto como tipo de Object, e acessar os membros do tipo em tempo de execução torna o programa mais lento.

Examples

Tipo inferência ocorre quando uma variável de 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 a inferência de tipo para determinar o tipo de uma variávelde 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 usado 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 a partir de valores de retorno das 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

Uma nova opção, Option Infer, permite que você especifique se inferência de tipo local é permitida em um arquivo específico. 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 criados no Visual Basic 2008, e Option Infer Off para projetos atualizados a partir de versões anteriores. For more information, see Declaração Option Infer and /optioninfer.

ObservaçãoObservação

If the value set for Option Infer in a file conflicts with the value set in the IDE or on the command line, the value in the file has precedence.

Restrictions

Tipo inferência pode ser usado somente para não-variáveis locaisestático ; ele não pode ser usado para determinar o tipo de classe de campos, propriedades ou funções.

Consulte também

Referência

Instrução For Each...Next (Visual Basic)

Instrução For...Next (Visual Basic)

Declaração Option Infer

/optioninfer

Conceitos

Tipos anônimos (Visual Basic)

Associação inicial e tardia (Visual Basic)

Introdução ao LINQ no Visual Basic