Descobrir propriedades de uma classe

25 views
Skip to first unread message

Newton Michel de Oliveira

unread,
Jun 17, 2013, 2:54:00 PM6/17/13
to de...@googlegroups.com
Pessoal,
sou iniciante no C# e estou precisando fazer uma classe que implemente diversas propriedades. estas propriedades são o nome do campo + 'F' na frente por exemplo, o campo é NOME e a variável é FNOME.. só que não  sei como fazer em c#, alguém pode me dar uma ajuda ou pelo menos o caminho das pedras?


Obrigado,
Newton Michel de Oliveira
Celular 55-51-92358577
http://br.linkedin.com/in/newtongaucho
http://twitter.com/newtongaucho

Coordenador e palestrante dos grupos:
*  (DUG-RS Delphi Users Grupo do RS (www.dug-rs.org) ) 
*  (DF-e - Documentos Fiscais Eletrônicos (http://www.facebook.com/groups/332215890175650/) 
Embarcadero Community Evangelist – Brazil



Felipe K. de Mello

unread,
Jun 17, 2013, 3:19:27 PM6/17/13
to de...@googlegroups.com
Não sei se entendi direito.
Seriam apenas propriedades normais com o F na frente?

Caso sim, simplesmente faça:
            public string NameF {get;set;}

Para mais informações (tudo sobre propriedades):

Felipe K. Mello


--
--
--
Acesse nosso blog http://devrs.net/
Siga-nos no twitter! http://twitter.com/DevRsNet
--
Antes de criar um novo post, para maior organização do grupo, procure seguir as regras de TAGS: http://devrs.net/regras-da-lista
Para postar para o grupo, envie email para de...@googlegroups.com
Para sair do grupo, envie email para devrs+un...@googlegroups.com
 
---
Você está recebendo esta mensagem porque se inscreveu no grupo "DevRS.NET" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para devrs+un...@googlegroups.com.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
 
 

Newton Michel de Oliveira

unread,
Jun 17, 2013, 3:27:41 PM6/17/13
to de...@googlegroups.com
Felipe,
na declaração fiz assim mesmo, mas queria recuperar este valor sem saber o nome.. por exemplo tenho um campo "NOME" e que atribuir o valor para uma propriedade "PNOME". como faço isto dinâmico?

ex:
string FNome;
variavel(FNOME).value = datareader[0].tostring();


Atenciosamente,
Newton Michel de Oliveira

Fábio Alves

unread,
Jun 17, 2013, 3:33:00 PM6/17/13
to de...@googlegroups.com
Cara dá uma olhada nesse código, acho que pode ajudar:


//typeof(T) esse T é o tipo, tua classe no caso
//valor é um dado qualquer que quero armazenar
var obj = System.Activator.CreateInstance(typeof(T), null);
int cont = 0;

foreach (var p in typeof(T).GetProperties())
{
switch (p.PropertyType.ToString().ToLower())
{
case "system.int32":
p.SetValue(obj, int.Parse(valor.ToString()), null);
break;
case "system.string":
p.SetValue(obj, valor.ToString(), null);
break;
case "system.decimal":
p.SetValue(obj, decimal.Parse(valor.ToString()), null);
break;
default:
break;
}
}

2013/6/17 Newton Michel de Oliveira <newton...@gmail.com>



--
Fábio Alves
Microsoft Certified Technology Specialist
.NET Framework 3.5, ASP.NET Applications

Jackson de Fraga

unread,
Jun 17, 2013, 3:35:09 PM6/17/13
to de...@googlegroups.com
Faça isso usando Reflection...

public static object GetPropValue(object src, string propName)
 {
     return src.GetType().GetProperty(propName).GetValue(src, null);
 }

Fábio Finn

unread,
Jun 17, 2013, 3:38:55 PM6/17/13
to de...@googlegroups.com

Eh isso ai mesmo.
Tu vai ter que usar isso, que eh reflection. Com ele, tu consegue percorrer as propriedades da tua classe em runtime, e pode pegar o valor de uma variável passando o nome dela por parâmetro. Pesquisa por reflection.
Se quiser, nos diga porque tu tá fazendo dessa forma. Qual eh o contexto da tua app?
Reflection deve ser usado em casos muito específicos, nem sempre eh uma boa prática.

Abraço.
Fábio

Jackson de Fraga

unread,
Jun 17, 2013, 3:44:53 PM6/17/13
to de...@googlegroups.com
"Reflection deve ser usado em casos muito específicos, nem sempre eh uma boa prática."

Realmente, ele é um pouco "lento", dai no caso se forem feitas mtas consultas, seria melhor fazer um cache das informações! Em um projeto tivemos que criar um banco noSQL para fazer cache dos metadados das classes!

Filipe Calleya Beis

unread,
Jun 17, 2013, 3:50:53 PM6/17/13
to Fábio Finn, de...@googlegroups.com
Perfeito concordo com o Fábio, seria legal ver o contexto pois isso não é muito usual.

Enviado pelo meu Windows Phone

De: Fábio Finn
Enviada em: 17/06/2013 16:38
Para: de...@googlegroups.com
Assunto: Re: [DevRS.NET] Descobrir propriedades de uma classe

Newton Michel de Oliveira

unread,
Jun 17, 2013, 3:55:26 PM6/17/13
to de...@googlegroups.com
Na realidade fiz uma classe de uma tabela, por exemplo cliente onde existem os campos cnpj char(14), razaosocial varchar(50), ativo char(1)

dai quero definir as propiedades e alimentar os valores. Qual seria a melhor pratica? 

por exemplo:

namespace Teste
{
    public class cliente
    {

        private string FCNPJ;
        private string FRazaoSocial;
        private bool FAtivo;

        public void cliente( strring ACNPJ)
        {
            pesquisacliente;
            carregadados;
        }

  
        public cnpj 
        {
            get { return FCNPJ; }            
            set { FCNPJ = value; }
        }
        public RazaoSocial
        {
            get { return FRazaoSocial; }            
            set { FRazaoSocial= value; }
        }
        public Ativo
        {
            get { return FAtivo; }            
            set { FAtivo= value; }
        }

    }
}

Jackson de Fraga

unread,
Jun 17, 2013, 3:58:15 PM6/17/13
to de...@googlegroups.com
neste caso é totalmente desaconselhado mesmo...

teria q criar uma camada DAL (Data Access Layer) e nesta classe ter GetByCNPJ por exemplo, ela iria fazer o SELECT e depois fazer o retorno de uma classe Cliente

Jackson de Fraga

unread,
Jun 17, 2013, 3:59:05 PM6/17/13
to de...@googlegroups.com
OU melhor, usar CodeFirst do EF

Newton Michel de Oliveira

unread,
Jun 17, 2013, 4:00:31 PM6/17/13
to de...@googlegroups.com
sou navato,
se tiveres um exemplinho acredeco..

Jackson de Fraga

unread,
Jun 17, 2013, 4:03:42 PM6/17/13
to de...@googlegroups.com
existe um tutorial do CodeFirst bem básico
http://msdn.microsoft.com/pt-br/library/hh972463.aspx

Fábio Finn

unread,
Jun 17, 2013, 4:21:04 PM6/17/13
to de...@googlegroups.com

Cara, quando tu disse que tem um campo nome, tu te referia a um campo no banco de dados ou num form, webform, etc?
Se for um campo no banco de dados, não vejo problema em ter o campo com mesmo nome na classe, daí ficaria algo assim:
cliente.Nome = dataReader["nome"].ToString();
Se eh um campo de tela, renomeia o campo pra algo do tipo txtNome e faz assim:
cliente.Nome = txtNome.Text;

Eu acho que eh essa a tua dúvida hehe, não entendi muito bem o teu problema.

Abraço.
Fábio

Newton Michel de Oliveira

unread,
Jun 17, 2013, 4:24:29 PM6/17/13
to de...@googlegroups.com
Fabio, 
é um campo no BD mesmo, mas quero fazer algo genérico, ou seja, uma função que carregue todos os campos em variaveis com mesmo nome, somente acrecentando a letra "F" no inicio por exemplo

Newton Michel de Oliveira

unread,
Jun 17, 2013, 4:26:01 PM6/17/13
to de...@googlegroups.com
no Delphi eu seu fazer, agora no C# eu não sabia.. com a dica do CodeFirst me achei..

Obrigado a todos,

Jackson de Fraga

unread,
Jun 17, 2013, 4:33:33 PM6/17/13
to de...@googlegroups.com
se eu tivesse uma cara de pau!
eu poderia fazer uma palestra pelo devrs "CodeFirst para Delphianos" pois tbm vim do Delphi! ;)

Fábio Finn

unread,
Jun 17, 2013, 5:03:50 PM6/17/13
to de...@googlegroups.com

Tranquilo, Newton.
Com o code first, tu mesmo vai mudar o teu conceito em relação à isso!
Boa sorte com .NET.

Abraço.
Fábio

Newton Michel De Oliveira

unread,
Jun 17, 2013, 5:39:26 PM6/17/13
to de...@googlegroups.com
Eu iria com toda certeza 


Newton Michel de Oliveira 
MVP Embarcadero Brasil
55-(51)92358577 @newtongaucho

Enviado via IPhone
*  (DUG-RS Delphi Users Grupo do RS (www.dug-rs.org) )=A
Reply all
Reply to author
Forward
0 new messages