listar nomes de propriedades de um objeto ou classe
23/07/2007
0
como eu faria isso com uma referencia de classe. Existe o tipo de referencia de classe no C#?
Vitor Rubio
Posts
24/07/2007
Rjun
object objeto; PropertyInfo[] properties; objeto = new object(); properties = objeto.GetType().GetProperties();
24/07/2007
Vitor Rubio
Fiz um exemplinho. Isso é reflection, né?
Vou postar codigo:
Minha classe (bem basica):
public class clsCliente { //campos privados não aparecem private int_Codigo; private string_Nome; private string_CPF; private string_RG; //campos protegidos não aparecem protected string_CampoProtegido; //campos publicos aparecem public string_CampoPublico; //propriedades publicas aparecem public string Nome { //metodos acessores tambem get {return _Nome; } set {_Nome = value; } } public string RG { get {return _RG;} set {_RG = value;} } public string CPF { get {return _CPF;} set {_CPF = value;} } public int Codigo { get {return _Codigo;} set {_Codigo = value;} } //metodo publico public void MetodoPublico() { return; } //metodo proteido public void MetodoProtegido() { return; } //metodo privado public void MetodoPrivado() { return; } }
o código para listar tudo em um listbox, inclusive os valores das propriedades:
(esse codigo instancia o objeto em questão e dá um valor para suas propriedades)
private void button1_Click(object sender, System.EventArgs e) { clsCliente oCli = new clsCliente(); oCli.Nome = "jose"; oCli.Codigo = 1; oCli.CPF = "29918516860"; oCli.RG = "335165989"; PropertyInfo[] properties = oCli.GetType().GetProperties(); MethodInfo[] metodos = oCli.GetType().GetMethods(); FieldInfo[] campos = oCli.GetType().GetFields(); EventInfo[] eventos = oCli.GetType().GetEvents(); MemberInfo[] membros = oCli.GetType().GetMembers(); listBox1.Items.Add("-------- propriedades e valores --------"); foreach (PropertyInfo pi in properties) { string Prop = pi.Name; MethodInfo ac = oCli.GetType().GetMethod("get_"+Prop); ParameterInfo[] pai = oCli.GetType().GetMethod("get_"+Prop).GetParameters(); string Valor = ac.Invoke(oCli, pai).ToString(); listBox1.Items.Add(Prop+" "+Valor); } listBox1.Items.Add("-------- metodos --------"); foreach (MethodInfo mi in metodos) { string Met = mi.Name; listBox1.Items.Add(Met); } listBox1.Items.Add("-------- campos (variaveis locais da classe) --------"); foreach (FieldInfo fi in campos) { string camp = fi.Name; listBox1.Items.Add(camp); } listBox1.Items.Add("-------- eventos --------"); foreach (EventInfo ei in eventos) { string even = ei.Name; listBox1.Items.Add(even); } listBox1.Items.Add("-------- todos os membros --------"); foreach (MemberInfo mei in membros) { string memb = mei.Name; listBox1.Items.Add(memb); } }
Será que isso seria a base para um OPF caseiro?
so falta agora saber como lista os nomes de colunas de um recordset.
Muito obrigado!
24/07/2007
Vitor Rubio
eu sei que dá para listar as propriedades no delphi, mas dá pra listar metodos, campos e coisas assim desse jeito, invocar os metodos ou pegar o valor das propriedades igual eu fiz aqui?
24/07/2007
Rjun
Quanto a fazer no Delphi, estou tentando implementar uma ideia que desenvolvi em C# no Delphi e estou sofrendo. Acho que da maneira que é feita no .NET não da pra fazer em Delphi não.
24/07/2007
Vitor Rubio
01/08/2007
Bruno Belchior
Clique aqui para fazer login e interagir na Comunidade :)