Ich nehme gerade an einer C # -Klasse teil und versuche herauszufinden, wie ich am besten vorgehen kann. Ich habe einen Java-Hintergrund und bin daher nur mit den Best Practices von Java vertraut. Ich bin ein C # Neuling!
Wenn ich in Java ein Privateigentum habe, mache ich das;
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
In C # sehe ich, dass es viele Möglichkeiten gibt, dies zu tun.
Ich kann es wie Java machen:
private string name;
public void setName(string name) {
this.name = name;
}
public string getName() {
return this.name;
}
Oder ich kann es so machen:
private string name;
public string Name {
get { return name; }
set { name = value; }
}
Oder:
public string Name { get; set; }
Welches sollte ich verwenden und welche Vorbehalte oder Feinheiten sind mit jedem Ansatz verbunden? Beim Erstellen von Klassen befolge ich allgemeine Best Practices, die ich aus Java kenne (insbesondere das Lesen von Effective Java). So bevorzuge ich zum Beispiel die Unveränderlichkeit (Setter nur bei Bedarf zur Verfügung stellen). Ich bin nur gespannt, wie diese Praktiken zu den verschiedenen Möglichkeiten passen, Setter und Getter in C # bereitzustellen. Wie würde ich Best Practices aus der Java-Welt in C # übersetzen?
BEARBEITEN
Ich habe dies als Kommentar zu Jon Skeets Antwort gepostet, aber dann wurde es lang:
Was ist mit einer nicht trivialen Eigenschaft (dh mit möglicherweise erheblicher Verarbeitung und Validierung)? Könnte ich es trotzdem über eine öffentliche Eigenschaft verfügbar machen, aber mit der in get
und gekapselten Logik set
? Warum sollte / sollte ich dies tun, wenn ich dedizierte Setter- und Getter-Methoden habe (mit zugehöriger Verarbeitungs- und Validierungslogik)?