listar nomes de propriedades de um objeto ou classe
gostaria de saber: tendo um objeto instanciado, como eu faço para listar os nomes das propriedades desse objeto.
como eu faria isso com uma referencia de classe. Existe o tipo de referencia de classe no C#?
como eu faria isso com uma referencia de classe. Existe o tipo de referencia de classe no C#?
Vitor Rubio
Curtidas 0
Respostas
Rjun
23/07/2007
object objeto; PropertyInfo[] properties; objeto = new object(); properties = objeto.GetType().GetProperties();
GOSTEI 0
Vitor Rubio
23/07/2007
Putz, cara, valeu mesmo, era o que eu precisava. Consegui listar todos os metodos e propriedades etc de minha classe.
Fiz um exemplinho. Isso é reflection, né?
Vou postar codigo:
Minha classe (bem basica):
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)
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!
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!
GOSTEI 0
Vitor Rubio
23/07/2007
Isso é possivel de fazer no delphi 7? não queria repetir a mesma pergunta em outro forum....
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?
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?
GOSTEI 0
Rjun
23/07/2007
Sim, isso é reflection.
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.
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.
GOSTEI 0
Vitor Rubio
23/07/2007
é.... estou vendo que, certas facilidades eu só vou obter quando portar minhas aplicações de delphi 7 pra delphi .net ... aí o reflection vai que vai...
GOSTEI 0
Bruno Belchior
23/07/2007
Na verdade, a questão não é a o C# em si, mas sim a framework .NET que oferece todos essas facilidades... Quanto ao delphi, até onde sei, não é tão flexível assim não...
GOSTEI 0