Visual Basic 9 - Anonymous Types

by Jenner Maciejewsky 7. maio 2008 07:47

Anonymous Types (Tipos Anônimos) é um novo tipo inserido no Visual Basic 2008, que permite criar instancias de objetos sem uma classe definida que define seu tipo, esse objeto contém membros (propriedades) que tem seus tipo inferidos pelo compilador. Desta forma podemos afirmar que um Tipo Anônimo é criado quando você cria uma instancia de um objeto que "não existe", definindo membros de seu interesse a esse objeto, assim o compilador, cria de forma transparente ao usuário, uma classe para esse objeto.

Para compreender melhor o que foi explicado acima veja o exemplo:

         Exemplo 1: Criando um Anonymous Type no Visual Basic 2008

Dim books = New With {.Title = "Accelerated VB 2008", _ 
.ISBN = 9781590598740}
Console.WriteLine("Books é do Tipo : " & books.GetType().Name)
Console.WriteLine("Title é do Tipo : " & books.Title.GetType().Name)
Console.WriteLine("ISBN é do Tipo : " & books.ISBN.GetType().Name)
Console.WriteLine(books)
Console.ReadLine()



Veja que no Exemplo acima em momento algum é definido um Tipo para books, que para o compilador será do tipo Anonymous Types, observe também que é necessário inicializar o objeto para que o compilador atribua a ele o tipo Anonymous Types. Não devemos confundir um Tipo Anônimo com Inferência de Tipo (Type Inference), na Inferência de Tipo logo após o Keyword New é especificado um nome de um Objeto. Veja como ficaria o Exemplo acima utilizando a Inferência de Tipo:



         Exemplo 2: Exemplo de Inferência de Tipo no Visual Basic 2008




Dim books = New Book With {.Title = "Accelerated VB 2008", _
.ISBN = 9781590598740}

Console.WriteLine("Books é do Tipo : " & books.GetType().Name)
Console.WriteLine("Title é do Tipo : " & books.Title.GetType().Name)
Console.WriteLine("ISBN é do Tipo : " & books.ISBN.GetType().Name)
Console.WriteLine(books)
Console.ReadLine()



  obs.: Para o exemplo acima foi criada uma classe Book com membros Title e ISBN.


Para o Visual Basic apesar do Objeto books não ter um tipo definido (uma classe associada), os membros de um tipo anônimo tem seu tipo inferido a partir dos valores que inicializarem esses membros. Como no exemplo acima os membros Title e ISBN da books tem seus tipo inferidos pelo compilador, que no caso acima serão String e Long (Int64 para o CLR). Veja a figura abaixo:


AnonymousType03


Vejamos abaixo o resultado dos códigos acima para melhor entender o que foi explicado até o momento.


Figura 1: Resultado o Exemplo 1 : Criando um Anonymous Type no Visual Basic 2008

AnonymousType01 


Figura 2: Resultado o Exemplo 1 : Exemplo de Inferência de Tipo no Visual Basic 2008

TypeInference01 


Tipos Mutáveis e Imutáveis


Quando um tipo anônimo é criado, seus membros (propriedades) pode ser mutável (leitura/gravação) ou imutável (somente leitura). Um membro é mutável quando é possível a qualquer momento alterar seu valor, enquanto que uma propriedade imutável os valores que foram inicializados não podem ser alterados.


No exemplo 1, as propriedades de books são mutáveis pois não foi especificado a nenhuma delas que seriam imutáveis. Para que uma propriedade seja imutável é necessário incluir o keyword Key antes do nome desta, como mostra o exemplo abaixo:



        Exemplo 3: Definido um membro Imutável para Anonymous Types




Dim books = New With {.Title = "Accelerated VB 2005", _
Key .ISBN = 9781590598740}

books.Title = "Accelerated VB 2008"



Como a propriedade ISBN foi definida como imutável, então não é possível efetuar alteração no seu valor como ocorreu no exemplo acima com Title. É possível marcar apenas uma propriedade com Key ou todas elas.


Inferindo Propriedades para Anonymous Type


Nos exemplos apresentados até então foram definidas os nomes das propriedades para os objetos criados, mas é possível fazer a inferência de nomes de propriedade a partir de nomes de váriaveis. Veja o exemplo abaixo:



        Exemplo 4: Inferindo nomes de Propriedade para Anonymous Types




dim bookTitle as string = "Accelerated VB 2005"
dim bookISBN as long = 9781590598740

Dim books = New With {bookTitle ,bookISBN}



Para o exemplo acima, como não foi definido um nome para as propriedades o compilador infere o nomes a partir dos nomes de váriaveis que inicializou as propriedades. Como mostra a figura abaixo:


Figura 3: Informações das variáveis Locais durante o Debug do Código acima


AnonymousType02 


Se desejar definir um nome para as propriedades diferente dos nomes das variaveis de inicialização, basta seguir o Exemplo 1, passando as variaveis como valores de inicialização.


 


Até o próximo...


 


Jenner Maciejewsky Rocha

MVP Visual Basic


 


























Share this post :

Tags: , ,

Artigos | Blog | MSDN

Os comentários estão fechados

Posts Antigos

Awards