Qual é a melhor maneira de acessar as propriedades da mesma classe, através de assessores ou diretamente?

votos
3

Isso é 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 porque?

_Name = Johnny

ou

Name = Johnny

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

Publicado 10/12/2008 em 12:39
fonte usuário
Em outras línguas...                            


5 respostas

votos
12

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. Esta não trabalhar onde 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 <= maxem 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 a 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 namea todos, única Name. Nós já temos isso por propriedades implementadas automaticamente, mas eles não podem conter qualquer lógica.

Respondeu 10/12/2008 em 12:45
fonte usuário

votos
2

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 certeza de desencadear esse código.

Respondeu 10/12/2008 em 12:46
fonte usuário

votos
1

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.

Respondeu 10/12/2008 em 12:44
fonte usuário

votos
0

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

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 configurar break point-, 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.
Respondeu 11/04/2009 em 20:14
fonte usuário

votos
0

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

Me.Name = "Johnny"

ou

Name = "Johnny"

Entretanto, 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 na maioria das auto-código gerado código 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.

Respondeu 10/12/2008 em 13:06
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more