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; }
Foi útil?

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; 
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top