Qual é a melhor maneira de propriedades de acesso da mesma classe, através de assessores ou diretamente? [fechadas]

StackOverflow https://stackoverflow.com/questions/355787

Pergunta

Este é algo que eu não sou muito consistente sobre e sempre curioso sobre o que outras pessoas fazem.

Como você acessar propriedades internas (privadas ou públicas)?

Por exemplo, você tem essa propriedade:

Private _Name As String

Public Property Name() As String
    Get
        Return _Name
    End Get
    Set(ByVal value As String)
        _Name = value
    End Set
End Property

Na mesma classe dentro de outra função qual deles você prefere? e por quê?

_Name = "Johnny"

ou

Name = "Johnny"

ignorar o fato de que eu usei nome em vez de Me.Name.

Foi útil?

Solução

Pessoalmente eu prefiro usar a propriedade sempre que possível. Isso significa que você ainda obter a validação, e você pode facilmente colocar pontos de interrupção no acesso a propriedade. Este não trabalho em que você está tentando fazer uma alteração em duas propriedades que validam uns contra os outros - por exemplo, um "min e max" par, onde cada um tem uma restrição de validação de tal forma que min <= max em todos os momentos. Você pode ter (C #):

public void SetMinMax(int min, int max)
{
    if (max > min)
    {
        throw new ArgumentOutOfRangeException("max";
    }
    // We're okay now - no need to validate, so go straight to fields
    this.min = min;
    this.max = max;
}

Em algum ponto no futuro, eu gostaria de ver C # ganhar a capacidade de declarar o campo de apoio dentro da propriedade, de modo que é privada para apenas propriedade:

public string Name
{
    string name;

    get { return name; }
    set
    {
        if (value == null)
        {
            throw new ArgumentNullException("value");
        }    
        name = value;
    }
}

Fora da propriedade, você não seria capaz de chegar a name em tudo, apenas a Name. Nós já temos isso por propriedades implementadas automaticamente, mas eles não podem conter qualquer lógica.

Outras dicas

Eu diria

Name = "Johnny"

A razão é que eu poderia ter alguma validação (ou gatilho, ou inicialização lenta, ou ...), ou pode decidir mais tarde para inserir alguma validação, ao atribuir nome e eu quero ter a certeza de gatilho que código.

Eu prefiro:

Name = "Johny"

Para mim, a razão é muito simples, se algo de ruim acontece com _Name, você pode sempre colocar alguma saída em getter / setter e descobrir o que está causando o problema.

Este é bastante interessante, eu acho que a maioria das pessoas fazendo o que faço

Me.Name = "Johnny"

ou

Name = "Johnny"

No entanto a maioria dos projetos que eu vi usando

_Name = "Jonny"

estilo. Que I embora foi uma má idéia, e graças a respostas que você confirmou. Mesmo a maior parte do código gerado auto-code por várias ferramentas utiliza acesso directo.

Existe algum impacto na performance particular? Ou é compilador otimiza-lo quando não há nenhum código extra em conjunto ou obter.

Use propriedade (Name). Eu acredito que uma propriedade deve ser o único "dono" de campo (_name) subjacente.

Vantagens de encapsular campo sob uma propriedade:

  • Legibilidade: Apenas uma região de código onde _name é alterado ou transformado antes retornado.
  • Fácil de set point break-, depuração etc.
  • DRY: Nenhum código repetido tanto quanto validação e processamento está em causa.
  • Alterar resiliência: Mudando validação e processamento não afetará o código usando propriedade.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top