Por que usar variáveis de membro em uma classe
-
21-12-2019 - |
Pergunta
Eu vi a maioria das pessoas usam variáveis de membro em uma classe, como :
string _foo;
public string foo { get { return _foo; }; private set { _foo = value}; }
Mas qual a diferença de que para isto?
public string foo { get; private set; }
Solução
Em casos simples como o que é o mesmo, mas em casos mais complexos, onde eventos de incêndio ou algo que você precisa, código adicional em obter e definir então você precisa do membro ex:
private string _name;
public string Name
{
get{ return _name; }
set
{
SomeHandler("Name", value);
_name = value;
}
}
Outras dicas
Enquanto a propriedade de implementação, na verdade, não fazer nada, mas get e set, a diferença é muito menor.As razões para a utilização que pode ser:
- Código legado antes do C# 3.0 (que acrescentou o auto-propriedades, ou seja,.o
public string Name { get; set; }
a sintaxe. - Esperando para ter de alterar a implementação do getter / setter em algum ponto.
- Requisitos para algumas serialização personalizada.
- Usando a base no código de campo por qualquer motivo.Um bom exemplo pode ser usando o campo de apoio como um
ref
parâmetro para um método.Isso também inclui coisas como utilizar o valor na nativo de interoperabilidade (GCHandle
etc.). - Simples preferência do usuário.Eu não costumo utilizar o auto-propriedades, porque eu gostaria de especificar os campos de apoio, manualmente.
- Usando um
readonly
campo de apoio é impossível quando utilizar o auto-propriedades.
Esta é apenas a ponta do iceberg.Também há toneladas de estranho razões, dizem ter de declarar o campo explicitamente para que alguém pode acessá-lo usando a reflexão, por qualquer motivo.
Antes da introdução de "Propriedades Automáticas", nós precisamos usar alguns "campo de apoio" para o propoerties.A maior parte do tempo a Propoerties simplesmente retornará o valor e defina o valor para o "campo de apoio", como no exemplo abaixo.
public string Name
{
get { return _name; }
set { _name=value; }
}
Com a introdução de "Propriedades Automáticas" podemos simplesmente ignorar o 'campo de apoio' (ou não precisamos fornecer um).Esta é na maior parte apropriado se o seu design é como o exemplo acima, mas se você precisar impor algum "tipo" de uma lógica personalizada ao recuperar o valor ou antes de definir o valor, que ainda precisa seguir o "bom e velho design" (que eu.e com o apoio de campo)
Cenário diferente, dá várias vantagens.
string _FirsName;
string _LastName;
public string FullName
{
get
{
return _FirsName + _LastName;
}
set;
}
public string ReverseName
{
get
{
return _LastName + ", " + _FirsName;
}
set;
}