Array
(
)

listar nomes de propriedades de um objeto ou classe

Vitor^_^
   - 23 jul 2007

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#?

Rjun
   - 24 jul 2007

#Código

object objeto;
PropertyInfo[] properties;

objeto = new object();
properties = objeto.GetType().GetProperties();


Vitor^_^
   - 24 jul 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):

#Código

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)

#Código
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!

Vitor^_^
   - 24 jul 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?

Rjun
   - 24 jul 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.

Vitor^_^
   - 24 jul 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...

Bruno Belchior
   - 01 ago 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...