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