Recuperando métodos e propriedades (C#)

 A dúvida.

Como recuperar os nomes de métodos e propriedades de um objeto em C#?

Simples. Usando System.Reflection.

Para conhecer mais o namespace http://msdn.microsoft.com/pt-br/library/system.reflection.aspx.

Exemplo para recuperar métodos e propriedades.

Crie uma nova aplicação console e utilize o código abaixo.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace ConsoleApplication
{
    class MinhaClasse
    {
        #region Propriedades
        public string Nome { get; set; }
        public string Sobrenome { get; set; }
        #endregion

        #region Fields
        public int Idade;
        public int Ano;
        #endregion

        #region Métodos
        public void Salvar()
        {
            Console.WriteLine("Nome      : {0}\nSobrenome : {1}\nRegistro salvo", Nome, Sobrenome);
        }

        public int Somar(int v1, int v2)
        {
            return v1 + v2;
        }
        #endregion

        #region Privados
        private void Privado()
        {
            Console.WriteLine("Eu sou um método privado");
        }
        #endregion
    }

    class Program
    {
        static void Main(string[] args)
        {
            #region Criando objeto
            MinhaClasse mc = new MinhaClasse();
            mc.Nome = "Desenvolvedores";
            mc.Sobrenome = "Net";
            mc.Idade = 8;
            mc.Ano = 2004;
            #endregion

            #region Recuperando as propriedades
            Console.WriteLine("Recuperando a propriedade nome");
            //recuperando as propriedades quando se sabe o nome
            PropertyInfo pi = mc.GetType().GetProperty("Nome");
            Console.WriteLine(pi.GetValue(mc, null).ToString());

            Console.WriteLine("");
            Console.WriteLine("Percorrendo as propriedades");
            //percorrendo as propriedades
            PropertyInfo[] pis = mc.GetType().GetProperties();

            foreach (PropertyInfo p in pis)
            {
                Console.WriteLine("Propriedade:{0} - Valor: {1}", p.Name, p.GetValue(mc, null));
            }
            #endregion

            #region Recuperando os campos
            Console.WriteLine("");
            Console.WriteLine("Recuperando o campo Idade");
            //recuperando o canmpo quando se sabe o nome
            FieldInfo fi = mc.GetType().GetField("Idade");
            Console.WriteLine(fi.GetValue(mc).ToString());

            Console.WriteLine("");
            Console.WriteLine("Percorrendo os campos");
            //percorrendo as propriedades
            FieldInfo[] fis = mc.GetType().GetFields();

            foreach (FieldInfo p in fis)
            {
                Console.WriteLine("Campo:{0} - Valor: {1}", p.Name, p.GetValue(mc));
            }
            #endregion

            #region Recuperando métodos
            Console.WriteLine("");
            Console.WriteLine("Recuperando o método salvar");
            //quando se sabe o nome
            MethodInfo mi = mc.GetType().GetMethod("Salvar");

            Console.WriteLine("");
            Console.WriteLine("Executando método salvar");
            mi.Invoke(mc, null);

            Console.WriteLine("");
            Console.WriteLine("Percorrendo métodos");

            //nao sei os nomes
            MethodInfo[] mis = mc.GetType().GetMethods();

            foreach (MethodInfo m in mis)
            {
                Console.WriteLine("Método:{0} - Parâmetros: {1} - Retorno: {2}", m.Name, m.GetParameters().Count(), m.ReturnType);
            }

            //executando métodos com parâmetros
            Console.WriteLine("");
            Console.WriteLine("Executando métodos com parâmetros e recebendo um retorno");

            mi = mc.GetType().GetMethod("Somar");
            Console.WriteLine("Resultado do método somar: {0}", mi.Invoke(mc, new object[] { 26, 29 }));

            Console.WriteLine("");
            Console.WriteLine("Recuperando um método privado e executando");

            mi = mc.GetType().GetMethod("Privado", BindingFlags.Instance |
                                                       BindingFlags.NonPublic);
            mi.Invoke(mc, null);

            #endregion
            Console.ReadKey();
        }
    }
}

É isso ai pessoal 🙂
Até o próximo
♦ Marcelo

Marcelo

Nascido em Juruaia/MG em uma fazenda de criação de búfalos, e residindo na região Sul do Brasil.
Trabalha com desenvolvimento de aplicações desde os 17 anos. Atualmente é Arquiteto Organizacional na Unimake Software.
Para saber mais ... http://desenvolvedores.net/marcelo
[]'s

Você vai gostar de...

Postagens populares.

Deixe um comentário

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.