Chodzę teraz na zajęcia z C # i próbuję znaleźć najlepszy sposób robienia rzeczy. Pochodzę z języka Java, więc znam tylko najlepsze praktyki dotyczące języka Java; Jestem nowicjuszem C #!
W Javie, jeśli mam prywatną własność, robię to;
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
W języku C # widzę, że jest na to wiele sposobów.
Mogę to zrobić jak Java:
private string name;
public void setName(string name) {
this.name = name;
}
public string getName() {
return this.name;
}
Albo mogę to zrobić w ten sposób:
private string name;
public string Name {
get { return name; }
set { name = value; }
}
Lub:
public string Name { get; set; }
Którego należy użyć i jakie są zastrzeżenia lub subtelności związane z każdym podejściem? Tworząc zajęcia kieruję się ogólnymi dobrymi praktykami, które znam z języka Java (zwłaszcza czytając efektywną Javę). Na przykład opowiadam się za niezmiennością (zapewnianie ustawiaczy tylko wtedy, gdy jest to konieczne). Jestem po prostu ciekawy, jak te praktyki pasują do różnych sposobów dostarczania metod ustawiających i pobierających w języku C #; zasadniczo, jak przełożyłbym najlepsze praktyki ze świata Java na C #?
EDYTOWAĆ
Publikowałem to jako komentarz do odpowiedzi Jona Skeeta, ale potem zrobiło się to długo:
A co z nietrywialną właściwością (tj., Być może z dużym przetwarzaniem i walidacją)? Czy nadal mogę go ujawnić za pośrednictwem własności publicznej, ale z logiką zawartą w get
i set
? Dlaczego miałbym / powinienem robić to ponad mając dedykowane metody ustawiające i pobierające (z powiązaną logiką przetwarzania i walidacji).