Sto frequentando un corso di C # in questo momento e sto cercando di scoprire il modo migliore di fare le cose. Vengo da un background Java e quindi ho familiarità solo con le best practice Java; Sono un principiante di C #!
In Java, se ho una proprietà privata, lo faccio;
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
In C #, vedo che ci sono molti modi per farlo.
Posso farlo come Java:
private string name;
public void setName(string name) {
this.name = name;
}
public string getName() {
return this.name;
}
Oppure posso farlo in questo modo:
private string name;
public string Name {
get { return name; }
set { name = value; }
}
O:
public string Name { get; set; }
Quale dovrei usare e quali sono gli avvertimenti o le sottigliezze coinvolti in ciascun approccio? Durante la creazione delle classi, seguo le migliori pratiche generali che conosco da Java (in particolare leggendo Java efficace). Quindi, ad esempio, sto favorendo l'immutabilità (fornendo setter solo quando necessario). Sono solo curioso di vedere come queste pratiche si adattano ai vari modi di fornire setter e getter in C #; in sostanza, come tradurre le best practice dal mondo Java in C #?
MODIFICARE
Lo stavo postando come commento alla risposta di Jon Skeet, ma poi è diventato lungo:
Che dire di una proprietà non banale (cioè, forse con elaborazione e convalida significative)? Potrei comunque esporlo tramite una proprietà pubblica ma con la logica incapsulata in get
e set
? Perché dovrei / dovrei farlo con metodi setter e getter dedicati (con logica di elaborazione e convalida associata).