Estou fazendo um curso de C # agora e estou tentando descobrir a melhor maneira de fazer as coisas. Eu venho de uma experiência em Java e, portanto, estou familiarizado apenas com as melhores práticas de Java; Sou um novato em C #!
Em Java, se tenho uma propriedade privada, faço isso;
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
Em C #, vejo que existem muitas maneiras de fazer isso.
Posso fazer como Java:
private string name;
public void setName(string name) {
this.name = name;
}
public string getName() {
return this.name;
}
Ou posso fazer desta forma:
private string name;
public string Name {
get { return name; }
set { name = value; }
}
Ou:
public string Name { get; set; }
Qual devo usar e quais são as advertências ou sutilezas envolvidas em cada abordagem? Ao criar classes, estou seguindo as melhores práticas gerais que conheço de Java (especialmente lendo Effective Java). Então, por exemplo, estou favorecendo a imutabilidade (fornecendo setters apenas quando necessário). Estou apenas curioso para ver como essas práticas se encaixam nas várias maneiras de fornecer setters e getters em C #; essencialmente, como traduziria as práticas recomendadas do mundo Java para C #?
EDITAR
Eu estava postando isso como um comentário à resposta de Jon Skeet, mas depois demorou muito:
Que tal uma propriedade não trivial (ou seja, com processamento e validação significativos, talvez)? Eu ainda poderia expô-lo por meio de uma propriedade pública, mas com a lógica encapsulada em get
e set
? Por que eu faria / deveria fazer isso sobre ter métodos setter e getter dedicados (com processamento associado e lógica de validação).