Array
(
)

Conhecimento de uma classe sobre si mesma ou RTTI

Vitor^_^
   - 11 jul 2007

Gostaria de poder listar, num listbox, todas as propriedades de uma classe, e se possível seus tipos.

Minha idéia é: dada uma determinada classe, salvar seu estado num banco de dados, onde cada tabela seria uma classe, cada registro um objeto diferente e cada campo de uma tabela seria uma propriedade.

Para isso eu estou usando o visual studio 2003, mas acho que em borland C# builder é a mesma coisa. (esse forum é só para borland c builder ou para c no geral?)

Grato

Cd.artista
   - 23 ago 2007

Já passei por isso...

acrescenta na sua classe o seguinte namespace:

#Código

using System.Reflection;


Estou usando o Visual Studio 2005, não sei se tem diferença pra sua versão.
Agora vamos criar uma coleção de strings para receber as propriedades e outra pra receber os tipos:

#Código
List<string> propi = new List<string>();
List<string> tipo = new List<string>();


Vamos fazer um loop pra carregar nossas coleções:

#Código
//Isso vai passar por cada propriedade da classe e pegar um lista de informações.
foreach(PropertyInfo prop in this.GetType().GetProperties()) {
//agora vamos preencher com os dados.
propi.Add(prop.Name);
tipo.Add(prop.PropertyType.Name);
}


Pronto preenchemos oque precisamos: Nomes e Tipos.
Basta retornar as strings;

#Código
//Transfoma as List em array.
string[] p = propi.ToArray();
string[] t = tipo.ToArray();


Pronto agora é só retirar dos araays e colocar onde quiser.
Espero que consiga entender.

Rjun
   - 23 ago 2007

No VS 2003 não dá para usar as listas genéricas. Será necessário jogar as propriedades em um ArrayList por exemplo

Vitor^_^
   - 24 ago 2007

Eu já tinha percebido isso ^^, mas esses generics dá pra usar com o .Net framework 2.0, usando o compilador csc.exe que vem nesse framework.

Só não sei se dá para configurar o vs2003 para usar o .Net 2.0, tenho quase certeza que não dá, mas mesmo assim dá pra fazer o programa no bloco de notas, ou notepad++ e compilar via linha de comando, ou usar uma IDE open-source, como o sharp develop.

Mas nesse caso nem precisa usar generics, basta criar um descendnete de arraylist que agrupe elementos do tipo string ou fazer o typecasting mesmo ^^

Rjun
   - 24 ago 2007

Você pode usar a versão Express da IDE do C#.

Cd.artista
   - 24 ago 2007

Ou Tenta usar um aray no lugar do List colocando um número de itens do array maior que o número de colunas da sua tabela.