Reflection
Reflection é um recurso muito poderoso do Framework da Microsoft, porém não é novidade para ninguém. O motivo desse post é ilustrar um uso prático de reflection.
No nosso exemplo, queremos listar em run time todas as propriedades de uma classe como se elas fossem itens de uma coleção.
A classe em questão herda de object e não implementa nenhuma interface que possibilite iteração, nesse caso somente com reflection poderemos listar as propriedades.
Abaixo segue a implementação sugerida:
class Program
{
static void Main(string[] args)
{
Person oPerson = new Person();
oPerson.iAge = 27;
oPerson.sName = "Fernando Vezzali";
PropertyInfo[] properties = oPerson.GetType().GetProperties();
foreach (PropertyInfo oPropertyInfo in properties)
{
MethodInfo oMethodInfo = oPerson.GetType().GetMethod("get_" + oPropertyInfo.Name);
ParameterInfo[] ArrParameterInfo = oPerson.GetType().GetMethod("get_" + oPropertyInfo.Name).GetParameters();
Console.WriteLine(oPropertyInfo.Name + " = " + oMethodInfo.Invoke(oPerson, ArrParameterInfo));
}
Console.Read();
}
}
class Person
{
private int _iAge;
private string _sName;
public int iAge
{
get { return _iAge; }
set { _iAge = value; }
}
public string sName
{
get { return _sName; }
set { _sName = value; }
}
}
Solution: ReflectionProject.zip