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