VB .NET - Usando Variáveis locais tipadas implicitamente

Neste artigo vou mostrar como usar variáveis locais tipadas implicitamente na linguagem VB .NET (a partir da versão 9.0).

O Visual Basic 9.0 (Visual Studio 2008) foi lançado juntamente com o Microsoft .NET Framework 3.5, em novembro de 2007. Nesta versão, a Microsoft adicionou novos recursos, tais como:

A partir desta versão podemos criar variáveis tipadas sem definir explicitamente os tipos de dados.
 
Você poderia fazer isso em versões anteriores do VB .NET, se Option Strict estivesse definida como Off, mas a variável era sempre tipada como Object. Neste caso, o seu tipo é automaticamente inferido com base no seu valor.

Para utilizar esta nova funcionalidade, Option Infer deve ser definida como On.

Você pode especificar essa configuração na caixa de diálogo Project Settings ou incluindo a declaração Option Infer On no início do seu código.

Se você criar um novo projeto no VS, as configurações do projeto terão Option Infer definido como On por padrão.

Qualquer projeto que for migrado de versão anteriores do VS terão Option Infer definido como Off.

Se você compilar o seu código usando o compilador VB (vbc) você pode usar a opção /optioninfer na linha de comando.

No exemplo a seguir temos um código feito no VS 2008 (no VS 2015 é exatamente igual) que mostra como usar a inferência de tipo:

Se você passar o cursor sobre qualquer uma das variáveis você verá uma dica de ferramenta que mostra que eles estão realmente sendo fortemente tipadas.

Assim :
- nome é inferida como um String,
- nascimento é uma data.
- idade é um número inteiro,
- alunos é um array de objetos Pessoa.

Quando seu código é compilado para a Microsoft Intermediate Language (MSIL), todas as variáveis são fortemente tipadas.

Usando a ferramenta MSIL Disassembler (ildasm.exe) podemos espiar o código compilado e verificar que cada variável foi realmente fortemente tipada:

Esse conceito é muito importante para criar e usar consultas LINQ.

Você pode usar variáveis locais tipadas implicitamente sempre que você quiser que o compilador determine o tipo de uma variável local e também para armazenar tipos anônimos, que são frequentemente utilizados em expressões de consulta.

Exemplo feito no Visual Studio Community 2015 :

Module Module1
    ' Obtem uma lista de clientes
    Dim clientes As List(Of Cliente) = Getclientes()
    'Retorna os clientes agrupados por pais
    Dim paises = From cli In clientes
                        Order By cli.Pais, cli.Cidade
                        Group By NomeDoPais = cli.Pais
                        Into ClientesNoPais = Group, Count()
                        Order By NomeDoPais
    Sub main()
        Console.WriteLine("  ======= Exibe os clientes agrupados pelo Pais =============")
        Console.WriteLine()

        ' Exibição do resultado
        For Each pais In paises
            Console.WriteLine(pais.NomeDoPais & " total =" & pais.Count)
            For Each cliente In pais.ClientesNoPais
                Console.WriteLine("  pais : " & cliente.Nome & " cidade : " & cliente.Cidade)
            Next
        Next
        Console.ReadKey()
    End Sub

    Private Function Getclientes() As List(Of Cliente)
        Return New List(Of Cliente) From
            {
                New Cliente With {.Id = 1, .Nome = "Macoratti", .Cidade = "Toronto", .Pais = "Canada"},
                New Cliente With {.Id = 2, .Nome = "Jefferson", .Cidade = "Brasilia", .Pais = "Brazil"},
                New Cliente With {.Id = 3, .Nome = "Miriam", .Cidade = "Vancouver", .Pais = "Canada"},
                New Cliente With {.Id = 4, .Nome = "Janice", .Cidade = "São Paulo", .Pais = "Brazil"},
                New Cliente With {.Id = 5, .Nome = "Jessica", .Cidade = "Goiânica", .Pais = "Brazil"}
            }
    End Function
End Module
Public Class Cliente
    Public Property Id() As Integer
    Public Property Nome As String
    Public Property Cidade As String
    Public Property Pais As String
End Class

Executando o código acima teremos o seguinte resultado:

Pegue o projeto completo aqui : VBNET_Var_local_Tipada_Implicitamente.zip

E os que são de Cristo crucificaram a carne com as suas paixões e concupiscências.
Gálatas 5:24

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

 

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

 

Referências:


José Carlos Macoratti