Conhecimento de uma classe sobre si mesma ou RTTI
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
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 Rubio
Curtidas 0
Respostas
Cd.artista
11/07/2007
Já passei por isso...
acrescenta na sua classe o seguinte namespace:
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:
Vamos fazer um loop pra carregar nossas coleções:
Pronto preenchemos oque precisamos: Nomes e Tipos.
Basta retornar as strings;
Pronto agora é só retirar dos araays e colocar onde quiser.
Espero que consiga entender.
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[] p = propi.ToArray(); string[] t = tipo.ToArray();
Pronto agora é só retirar dos araays e colocar onde quiser.
Espero que consiga entender.
GOSTEI 0
Rjun
11/07/2007
No VS 2003 não dá para usar as listas genéricas. Será necessário jogar as propriedades em um ArrayList por exemplo
GOSTEI 0
Vitor Rubio
11/07/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 ^^
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 ^^
GOSTEI 0
Rjun
11/07/2007
Você pode usar a versão Express da IDE do C#.
GOSTEI 0
Cd.artista
11/07/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.
GOSTEI 0