Conhecimento de uma classe sobre si mesma ou RTTI

11/07/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


Vitor^_^

Respostas

23/08/2007

Cd.artista

Já passei por isso...

acrescenta na sua classe o seguinte namespace:

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:

List<string> propi = new List<string>();
List<string> tipo = new List<string>();


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

//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;

//Transfoma as List em array.
string[&93; p = propi.ToArray();
string&91;&93; t = tipo.ToArray();


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


Responder Citar

23/08/2007

Rjun

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


Responder Citar

24/08/2007

Vitor^_^

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 ^^


Responder Citar

24/08/2007

Rjun

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


Responder Citar

24/08/2007

Cd.artista

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.


Responder Citar