msdn24_capa.jpg

Clique aqui para ler todos os artigos desta edição

 

Reflection no Visual Basic .NET 

 

A habilidade para programaticamente inspecionar um assembly em run-time é importante para o projeto de software baseado em atributos personalizados, pois nos permite determinar como os atributos foram aplicados e parametrizados. Neste artigo focalizaremos como é possível usar reflection e programaticamente inspecionar um assembly em run-time.  Dedicaremos também algum tempo para discutir outros cenários para os quais o uso de reflection pode ser útil. 

 

Fundamentos do Reflection

O .NET Framework introduziu uma exigência importante para o desenvolvimento de aplicações: toda unidade de código distribuível (assembly), agora exige metadados high-fidelity para se auto-descrever e para os tipos que estão nele definidos. A Figura 1 mostra como são embutidos os metadados e as informações de tipo dentro de um assembly compilado. 

 

image001.gif

Figura 1 - Metadata e Type Info

 

Reflection é o ato de programaticamente inspecionar um assembly, seus metadados e a informação de tipo que estão nele contidas. Iniciarmos com reflection é bastante simples. Há bastante o que fazer sem escrevermos muito código.

Reflection é possível via um conjunto de classes na Framework Class Library, que fazem parte do namespace System.Reflection. A Figura 2 mostra uma hierarquia de herança das classes que são geralmente usadas ao programar reflection. Vemos que as únicas duas classes neste diagrama que não estão definidas dentro do namespace System.Reflection são System.Object e System.Type. 

Comecemos escrevendo algum código que mostrará como inspecionar os metadados associados com um assembly. Por exemplo, digamos que necessitamos programaticamente determinar um assembly completamente qualificado.  Podemos começar criando e inicializando um objeto da classe Assembly. 

 

image002.gif

Figura 2 - Framework Class Library Reflection Classes

 

A classe Assembly provê um método compartilhado chamado LoadFrom que torna possível inicializar um objeto Assembly usando o caminho físico para um arquivo assembly. Uma vez inicializado o objeto Assembly, podemos consultar o nome completo do assembly usando a propriedade FullName. 

Podemos notar que o nome da classe Assembly aparece entre colchetes. Estes colchetes são requeridos na sintaxe do Visual Basic® .NET porque Assembly também é uma palavra chave. Precisamos usar os colchetes para informar ao compilador do Visual Basic .NET que Assembly está sendo usada como um nome de classe em lugar de uma palavra chave. 

O exemplo na Listagem 1, inicializa um objeto Assembly usando um caminho físico e o método LoadFrom. Alternativamente, podemos usar o método Load quando precisarmos inicializar um objeto Assembly em um assembly no Global Assembly Cache (GAC), utilizando um nome assembly fully qualified, como mostrado no seguinte código:

 

Dim asm As [Assembly]

...

Quer ler esse conteúdo completo? Tenha acesso completo