Je suis actuellement en cours de C # et j'essaie de trouver la meilleure façon de faire les choses. Je viens d'un milieu Java et je ne connais donc que les meilleures pratiques Java; Je suis novice en C #!
En Java, si j'ai une propriété privée, je le fais;
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
En C #, je vois qu'il existe de nombreuses façons de faire cela.
Je peux le faire comme Java:
private string name;
public void setName(string name) {
this.name = name;
}
public string getName() {
return this.name;
}
Ou je peux le faire de cette façon:
private string name;
public string Name {
get { return name; }
set { name = value; }
}
Ou:
public string Name { get; set; }
Lequel devrais-je utiliser et quelles sont les mises en garde ou les subtilités impliquées dans chaque approche? Lors de la création de classes, je suis les meilleures pratiques générales que je connais de Java (en particulier la lecture de Effective Java). Ainsi par exemple, je privilégie l'immuabilité (fournir des setters uniquement lorsque cela est nécessaire). Je suis simplement curieux de voir comment ces pratiques s'intègrent dans les différentes manières de fournir des setters et des getters en C #; essentiellement, comment traduire les meilleures pratiques du monde Java en C #?
ÉDITER
J'étais en train de poster ceci en commentaire de la réponse de Jon Skeet, mais cela est devenu long:
Qu'en est-il d'une propriété non triviale (c'est-à-dire avec un traitement et une validation importants peut-être)? Pourrais-je toujours l'exposer via une propriété publique mais avec la logique encapsulée dans get
et set
? Pourquoi ferais-je / devrais-je faire cela au lieu d'avoir des méthodes setter et getter dédiées (avec la logique de traitement et de validation associée).