Dev (Back & Front)ARTIGO

Phantom: Easy reflection in .NET

Resolvi publicar um utilitário (inclusive com seu código) 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.

Phantom DOWNLOAD.

Readme oficial.

Como usa isso?

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

using Phantom;

Simples! Isso faz com que apareçam 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 especifico.

Pegando (get) valor de uma propriedade

object person = new Person { Name = "Arthur", Age = 4 };<br /><br />person.Get("Name");<br /><br />>> Arthur

Atribuindo (set) valor de uma propriedade

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

Pegando todas as propriedades

var properties = person.Values();<br /><br />foreach(var property in properties)<br />{<br />    Console.WriteLine(property.Key + " = " + property.Value);<br />}<br /><br />>> Name = Arthur<br />>> Age = 4

Bom para usar com objetos anônimos

Já falei de objetos anônimos aqui.

public void PrintName(object target)<br />{<br />    Console.WriteLine(target.Get("Name"));<br />}<br /><br />PrintName(new { Name = "Wagner" });<br /><br />>> Wagner

Importando valores de outros objetos

object animal = new Animal { Age = 20 };<br /><br />person.Import(animal);<br /><br />person.Get("Name");<br />person.Get("Age");<br /><br />>> Arthur<br />>> 20

Invocando um método

object name = "Francine"; <br /><br />name.Invoke("ToUpper");<br /><br />>> FRANCINE

Existem outras utilidades, mas por hoje é só!

é um entusiasta da programação de computadores. Já trabalhou com diversas linguagens e tecnologias, sendo as principais Ruby, .NET e Java. Também é professor de desenvolvimento de software orientado a objetos e mantém um blog sobre o assunto. É formando em Segurança da Informação e técnico em Telecomunicações.

Ver perfil