none
Uso de propriedades privadas em C# RRS feed

  • Pergunta

  • Bom dia!

    Estou usando uma ferramenta case que me gera as classes C# da maneira tradicional, mostrada abaixo:

            private string nome;
            public String Nome
            {
    	    get { return nome; }
                set { nome = value; }
            } 

    Como hoje só se usam as propriedades automáticas, qual é o impacto de se trabalhar com a maneira convencional (ou antiga pra ser mais exata?)

    Valeu

    quarta-feira, 18 de setembro de 2013 13:16

Respostas

  • Essa forma que você mencionou de propriedades automáticas se chama Propriedade Auto Implementada, só precisamos dos acessores get e set, não precisamos de um atributo local (private) para armazenar os dados pois o compilador internamente vai criar uma variável privada para armazenar os dados...

    Já fiz alguns testes de performance monitorando o tempo para gravar e ler dados em propriedades auto implementadas e propriedades com atributos explicitos e o tempo de processamento deu o mesmo, mudava micronésimos de segundos...

    Uma alternativa bacana para conhecer o por trás dos panos é sempre olhar o código MSIL gerado através de uma ferramenta utilitária da própria plataforma .NET chamada ILDASM ou uma ferramenta terceira mais power chamada ILSPY


    Leonardo Lourenço Silva



    • Editado Leonardo Lourenço Silva quarta-feira, 18 de setembro de 2013 13:40 Faltaram textos
    • Sugerido como Resposta D.Bacci quarta-feira, 18 de setembro de 2013 14:03
    • Marcado como Resposta Renata Cristina quarta-feira, 18 de setembro de 2013 14:05
    quarta-feira, 18 de setembro de 2013 13:34
  • Bom dia.. 

    Suas classes de maneira tradicional sairão mais expostas somente. 

    Se for um produto que a empresa que trabalha faz, esse produto pode deixar brechas para serem utilizadas bibliotecas em outros sistemas, por exemplo. Essas coisas.. Se for somente um produto interno, não vejo muitos problemas não.. É tudo questão de segurança mesmo.

    Abraços


    Marcio S Silva | MCP |marsosil@ovi.com|http://marsosi.blogspot.com.br

    • Sugerido como Resposta Márcio S Silva quarta-feira, 18 de setembro de 2013 13:33
    • Marcado como Resposta Renata Cristina quarta-feira, 18 de setembro de 2013 14:11
    quarta-feira, 18 de setembro de 2013 13:33

Todas as Respostas

  • Bom dia.. 

    Suas classes de maneira tradicional sairão mais expostas somente. 

    Se for um produto que a empresa que trabalha faz, esse produto pode deixar brechas para serem utilizadas bibliotecas em outros sistemas, por exemplo. Essas coisas.. Se for somente um produto interno, não vejo muitos problemas não.. É tudo questão de segurança mesmo.

    Abraços


    Marcio S Silva | MCP |marsosil@ovi.com|http://marsosi.blogspot.com.br

    • Sugerido como Resposta Márcio S Silva quarta-feira, 18 de setembro de 2013 13:33
    • Marcado como Resposta Renata Cristina quarta-feira, 18 de setembro de 2013 14:11
    quarta-feira, 18 de setembro de 2013 13:33
  • Essa forma que você mencionou de propriedades automáticas se chama Propriedade Auto Implementada, só precisamos dos acessores get e set, não precisamos de um atributo local (private) para armazenar os dados pois o compilador internamente vai criar uma variável privada para armazenar os dados...

    Já fiz alguns testes de performance monitorando o tempo para gravar e ler dados em propriedades auto implementadas e propriedades com atributos explicitos e o tempo de processamento deu o mesmo, mudava micronésimos de segundos...

    Uma alternativa bacana para conhecer o por trás dos panos é sempre olhar o código MSIL gerado através de uma ferramenta utilitária da própria plataforma .NET chamada ILDASM ou uma ferramenta terceira mais power chamada ILSPY


    Leonardo Lourenço Silva



    • Editado Leonardo Lourenço Silva quarta-feira, 18 de setembro de 2013 13:40 Faltaram textos
    • Sugerido como Resposta D.Bacci quarta-feira, 18 de setembro de 2013 14:03
    • Marcado como Resposta Renata Cristina quarta-feira, 18 de setembro de 2013 14:05
    quarta-feira, 18 de setembro de 2013 13:34
  • Márcio e Leonardo, valeu e muito a resposta de  vocês.

    A ferramenta case é a Enterprise Architect, nela você desenha as classes visualmente com comentários e tudo o mais. Só que na hora de gerar ela gera de forma explícita. Considero mais elegante o trabalho com o uso da ferramenta.

    Renata

    quarta-feira, 18 de setembro de 2013 14:15
  • Essa não é uma maneira antiga, ainda é muito utilizada. No seu exemplo, uma propriedade auto implementada seria mais simples, porém, nas situações abaixo, a maneira "tradicional", ou "antiga", como você diz, pode lhe trazer ganhos de performance por exemplo:

    private bool? _isValid; public bool IsValid { get { if(_isValid == null){ _isValid = ValidaUsuario(); } return _isValid.Value; } } private bool ValidaUsuario() { // método pesado de validação de usuário // que acessa, por exemplo, o banco de dados

    }

    ou:

    private static bool? _isValid;
    public bool IsValid 
    {
      get 
      {
        if(_isValid == null) 
        {
          _isValid = ValidaAplicacao();
        }
        return _isValid.Value;
      }
    }
    
    private bool ValidaAplicacao() 
    {
      // método que faz alguma coisa muito pesada que deveria
      // ser executado apenas uma vez na app
    }

    Tudo depende do contexto que você estiver. Propriedades auto implementadas são muito úteis para contextos mais simples.


    Att, Vitor Hugo Salgado

    quarta-feira, 25 de setembro de 2013 17:07