.NET

12 mar, 2010

Phantom: reflexões em .NET

Publicidade

Resolvi publicar um utilitário – inclusive com seu
código
(Github) que venho usando há algum tempo em meus projetos
.NET, o Phantom.

Phantom é um utilitário que torna fácil fazer reflexão em objetos.
Para quem não sabe, reflexão consiste basicamente em trabalhar com
objetos sem saber seu tipo, ou seja, chamar seus métodos e propriedades.

Como usa isso?

Para iniciar o uso do Phantom basta adicionar isso
na sua classe:

using Phantom;

Simples! Isso faz com que aparece alguns métodos (extension
methods) em todos os objetos.

Ok, mas o que eu posso fazer?

Get e set em propriedades, invocar métodos, pegar todas as
propriedades e mais em objetos que você nem sabe o Type. Sim, isso é
legal!

Vou usar C# nos exemplos. Notem que sempre manipulo object e nunca um
tipo específico.

Pegando (get) valor de uma propriedade

object person = new Person { Name = "Arthur", Age = 4 };

person.Get("Name");

>> Arthur

Atribuindo (set) valor de uma propriedade

person.Set("Name", "Francine");

Pegando todas as propriedades

var properties = person.Values();

foreach(var property in properties)
{
Console.WriteLine(property.Key + " = " + property.Value);
}

>> Name = Arthur
>> Age = 4

Bom para usar com objetos anônimos

Já falei de objetos anônimos aqui.

public void PrintName(object target)
{
Console.WriteLine(target.Get("Name"));
}

PrintName(new { Name = "Wagner" });

>> Wagner

Importando valores de outros objetos

object animal = new Animal { Age = 20 };

person.Import(animal);

person.Get("Name");
person.Get("Age");

>> Arthur
>> 20

Invocando um método

object name = "Francine"; 

name.Invoke("ToUpper");

>> FRANCINE

Existem outras utilidades, mas por hoje é só!

*

Gostou deste artigo? Saiba mais sobre o assunto no iMasters Shop!