Olha pessoal, nesta dica vou mostrar alguns exemplos de como trabalhar com o Reflection.
 
Reflection é, segundo a definição existente no .Net Framework SDK, o processo de obter informações sobre assemblies e os tipos definidos dentro dele, e ainda a criação, invocação e acesso às instâncias de tipos em tempo de execução. A classe Type é a classe principal da reflexão. Ela encapsula a representação do tipo de um objeto. A classe type é o primeiro caminho para acesso aos metadados. Ela deriva do MemberInfo e encapsula informações sobre os membros de uma classe (métodos, propriedades, campos, eventos e etc.
 
As vezes precisamos extrair informações em tempo de execução de objetos, ou mesmo realizar atividades como criar dinamicamente alguns objetos. Nesse contexto, o .Net Framework nos fornece o mecanismo de Reflection, que nos permite “manipular” os assemblies e seus tipos em tempo de execução. Mas o uso de Reflection vai muito, além disso, como por exemplo, quando realizamos tarefas de serialização, onde o mecanismo utiliza reflection para acessar dados e determinar campos a serem persistidos nos tipos relacionados.
Vamos a um pequeno exemplo.
A primeira coisa a fazer é criar um projeto: Vá em File -> New -> Project,  em Visual C# escolha a opção Console Application. Salve o projeto como prjReflection e a classe como Funcionário.cs.
Próximo passo é fazer o using do Reflecton. Logo no inicio do Funcionario.cs faça o using System.Reflection;

Agora, para exemplificar, vamos criar uma classe chamada Funcionario, veja como abaixo:
 
class Funcionario
{
      public Funcionario(int codigo, string nome)
     {
           Codigo = codigo;
           Nome = nome;
     }

      public int Codigo { get; set; }
      public string Nome { get; set; }
      public event EventHandler PegarValor;
}


Feito isso, já posso passar para a utilização propriamente dita do reflection. O primeiro passo é criar o objeto Funcionario passando os valores para seu construtor. Veja o exemplo abaixo:

Funcionario FUNC = new Funcionario(123, "Elias Medeiros");


Agora, vamos atribuir os tipos referentes ao objeto Funcionario para uma variável do tipo Type. Com isso, vamos conseguir retorna qualquer tipo que o objeto Funcionario possuir. Veja abaixo:

Type Tipos = FUNC.GetType();


Vamos agora percorrer os tipos do objeto Funcionario.


- Propriedades: Reparem que estou criando uma variável (PI) do tipo PropertyInfo para retornar as propriedades do objeto Funcionario. Para isso eu passo a variável Tipos.GetProperties()...

foreach (PropertyInfo PI in Tipos.GetProperties())
{
         Console.WriteLine(string.Format("Propriedade: {0} - Valor: {1}",        PI.Name, PI.GetValue(FUNC, null)));
}


2º - Construtores e parametros: Neste caso, vamos criar uma variável (CI) do tipo ConstructorInfo. Para isso, eu passo a variável Tipos.GetConstructors().... Dá mesma forma, para pegar seus parâmetros, sendo que a variável será do tipo ParameterInfo. Para este exemplo, eu passo a variável CI.GetParameters()....

foreach (ConstructorInfo CI in Tipos.GetConstructors())
{
     Console.WriteLine(string.Format("Construtor: {0}", CI.Name));
     foreach (ParameterInfo PI in CI.GetParameters())
    {
           Console.WriteLine(string.Format(" Parametros: {0}", PI.Name));
    }
}


3º - Eventos: Para o caso de eventos, segui o mesmo princípio. Sendo que a variável será do tipo EventInfo. Assim, eu passo a variável Tipos.GetEvents()....

foreach (EventInfo EI in Tipos.GetEvents())
{
       Console.WriteLine(string.Format("Eventos: {0}", EI.Name));
}


Conclusão
 
Nesta dica mostrei um pouco das vantagens de trabalhar com o reflection ecomo manipular os objetos em runtime. Lembro que, este foi um pequeno exemplo, nas próximas dicas vou me aprofundar mais sobre esta tecnologia e suas novidades.

Então pessoal até uma próxima dica e fiquem com Deus.