Pergunta

Qual é a diferença entre o uso de propriedades privadas em vez de Privado Campos

private String MyValue { get; set; }

// instead of

private String _myValue;

public void DoSomething()
{
   MyValue = "Test";

   // Instead of

   _myValue = "Test";
}

Existe algum problema de desempenho? ou apenas uma convenção de nomenclatura?

Foi útil?

Solução

Propriedades privadas permitem que você abstratas seus dados internos de modo que as alterações à representação interna não precisa afetar outras partes da sua implementação, mesmo na mesma classe. campos particulares não oferecem esta vantagem. Com propriedades automáticas em C # 3.0, eu raramente vejo a necessidade de implementar campos diretamente -. Público ou privado

Outras dicas

A grande ganho que você pode começar a partir de uma propriedade (privada, pública, ...) é que ele pode produzir um valor calculado vs. um valor definido. Por exemplo

class Person { 
  private DateTime _birthday;
  private int _age { get { return (DateTime.Now - _birthday).TotalYears; }
}

A vantagem deste modelo é que apenas um valor deve ser atualizado para N outros valores para refletir a mudança. Isto é verdade de propriedades, independentemente de acessibilidade. Não há nenhuma vantagem específica de uma propriedade privada vs propriedade não-privada (que não sendo privado é claro)

Você raramente quer fazer uma propriedade privada. A provisão para uma propriedade a ser é privado fornecidas apenas por uma questão de exaustividade. E se sua propriedade é simplesmente obter / definir o valor do campo, então não há diferença de desempenho porque ele provavelmente será inlined pelo compilador JIT.

Outro então o que já foi respondida, desempenho, symantics e completitude Há um caso válido tenho visto para propriedades privadas em vez de um campo particular:

public class Item
{
    private Item _parent;
    private List<Item> _children;

    public void Add(Item child)
    {
        if (child._parent != null)
        {
            throw new Exception("Child already has a parent");
        }
        _children.Add(child);
        child._parent=this;
    }
}

Vamos dizer que nós não queremos expor Pai por qualquer motivo, mas também pode querer fazer verificações de validação. Os pais devem ser capazes de ser adicionado como uma criança a um dos seus filhos?

Para resolver isso, você pode fazer esta uma propriedade e executar uma verificação de referências circulares.

Acesso à propriedade será (fracionada) mais lento, uma vez que irá chamar o getter / setter. A vantagem é que você pode fazer validação de dados, que pode filtrar até herdeiros se você alterar a propriedade a ser protegida, por exemplo.

Ao lidar com acesso privado, as diferenças são muito pequenas. Sim, existe um acerto de desempenho (que pode ser otimizado pelo JIT) Imóveis Enviar representam uma chamada de método, em vez de um acesso endereço direto.

A principal vantagem de usar propriedades é permitir mudar a implementação sem alterar a assinatura externo exigido. Uma vez que estes são acessados ??em particular, quaisquer alterações à implementação apenas efeitos código local.

Ao lidar com os membros privados, não vejo nenhuma vantagem adquirida a partir de propriedades, exceto para as convenções de sua equipe.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top