Canais iMasters

.NET

Phantom: reflexões em .NET

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!


Comente também

3 Comentários

Willian Fernando de Oliveira
Willian Fernando de Oliveira

bacana =] parabens !

Junio Silva
Junio Silva

Muito interessante, pare até PHP :)

Vinícius Gama
Vinícius Gama

Muito legal, da pra fazer bastante coisa mesmo.

Qual a sua opinião?

Comentários considerados ofensivos serão moderados.

Parceiros

IBM
PagSeguro
Internet Innovation
Dialhost
HostNet
Tecla
KingHost
DotStore
Dinamize