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.
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.
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.
object person = new Person { Name = "Arthur", Age = 4 };
person.Get("Name");
>> Arthurperson.Set("Name", "Francine");var properties = person.Values();
foreach(var property in properties)
{
Console.WriteLine(property.Key + " = " + property.Value);
}
>> Name = Arthur
>> Age = 4Já falei de objetos anônimos aqui.
public void PrintName(object target)
{
Console.WriteLine(target.Get("Name"));
}
PrintName(new { Name = "Wagner" });
>> Wagnerobject animal = new Animal { Age = 20 };
person.Import(animal);
person.Get("Name");
person.Get("Age");
>> Arthur
>> 20object name = "Francine";
name.Invoke("ToUpper");
>> FRANCINEExistem outras utilidades, mas por hoje é só!
Leandro Carvalho
O quanto isso pode consumir de desempenho pra aplicação?
Wagner Andrade
Leandro,
Existe uma perda de desempenho insignificante.
Mesmo assim é importante usar só quando realmente necessário.
Já planejei fazer alguns benckmarks, em breve trago noticias sobre isso.
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.