Mein Dozent sagte uns, dass wir private Felder und öffentliche Objekte verwenden sollten. Kürzlich habe ich ein Tutorial Video gesehen. Der Präsentator hat nur Eigenschaften erstellt. Ist es in Ordnung, nur die Eigenschaft zu verwenden?Ist es in Ordnung, private Felder zu überspringen und nur Eigenschaften in C# zu verwenden?
Antwort
öffentliche Eigenschaften wie
public string Name { get; set; }
automatisch private Träger Felder vom Compiler implementieren. Sie sehen sie nie, aber der Effekt ist der selbe wie manuell spezifizierte Unterstützungsfelder.
private string name;
public string Name { get { return name; } set { name =value; } }
Also die Antwort ist ** ja mit C# 3.0 und später ** –
'C# 3.0' und Visual Studio 2008 ist veraltet und so habe ich nicht die Mühe zu klären. Ich frage mich, ob es Klassen gibt, die immer noch zu .NET 3.5 bleiben nur – ja72
Ja, es ist in Ordnung, öffentliche Eigenschaften ohne private Felder zu verwenden, obwohl die Verwendung öffentlicher Felder nicht in Ordnung ist. Der Grund dafür ist, dass Sie mit Eigenschaften die Art ändern können, wie Sie das Feld später intern validieren und speichern, während das Ändern nur von öffentlichen Feldern jeden Benutzer Ihrer Klasse durchbrechen würde. Der Hauptunterschied besteht darin, dass Sie bei Eigenschaften immer noch den internen Status der Klasse steuern können, selbst wenn dies mit automatisch generierten Feldern geschieht, während dies bei öffentlichen Feldern nicht der Fall ist.
Für .Net framework 2.0
und weniger, private Felder sind notwendig, sonst werden Sie Fehler erhalten kompilieren. In den höheren Versionen von .Net Framework
funktioniert es ohne Fehler.
private Felder verwenden hat viele Vorteile
die Eingänge Validieren, bevor sie an die Eigenschaften
public int Max { get { return m_Max; } set { if (value>0 && value<100) { m_Max=value; } } }
Auslösen von Ausnahmen für falsche Werte
Von https://msdn.microsoft.com/en-us/library/ms229006.aspx Zuordnung
den vorherigen Wert beibehalten, wenn ein Eigenschaften-Setter eine Ausnahme auslöst.
Vermeiden Sie das Auslösen von Ausnahmen von Eigenschaftengettern. Wenn ein Getter eine Ausnahme auslösen kann, sollte es wahrscheinlich eine Methode, um
public int Max
{
get { return m_Max; }
set {
if(value > 0 && value < 100){ \\Value is within valid range
m_Max = value;
}
else if(value < 0)
//throw some exception to indicate value is not valid
else if(value > 100)
//throw some exception to indicate value is not valid
}
}
Ich bin nicht in der Lage, meinen Code zu formatieren – Kira
Es ist eine schlechte Praxis für eine Eigenschaft Ausnahmen zu werfen (es sei denn, es ist ein Indexer).Weitere Informationen finden Sie unter [diese Frage zu Eigenschaften und Ausnahmen] (http://stackoverflow.com/questions/1488472/best-practices-throwing-exceptions-from-properties). Kurz gesagt: Wenn Ihre Immobilie werfen kann, dann sollte es wahrscheinlich eine Methode sein. In Ihrem zweiten Beispiel würde ich den Max-Getter beibehalten, aber den Setter durch eine SetMax-Methode ersetzen. – AnorZaken
Für Setter zeigen sie an, dass Ausnahmen eine angemessene und akzeptable Fehlerbehandlungsstrategie darstellen. – Kira
- 1. Ist es in Ordnung, mit() zu verwenden?
- 2. Warum öffentliche Eigenschaften für private Felder in C# verwenden?
- 3. Ist es in Ordnung, eine öffentliche Variable in C# zu verwenden, wenn es schreibgeschützt ist?
- 4. Ist es in Ordnung, `using` so zu verwenden?
- 5. Ist es in Ordnung, UCC API 2017 zu verwenden?
- 6. Ist es in Ordnung, den CSS3-Selektor zu verwenden: not()
- 7. Ist es in Ordnung
- 8. Ist es in Javascript in Ordnung, Eigenschaften anstelle von Variablen zu verwenden?
- 9. Ist es in Ordnung, google.setOnLoadCallback mehrmals zu verwenden?
- 10. Ist es in Ordnung LinearLayout anstelle von FrameLayout zu verwenden?
- 11. Ist es in Ordnung, Ruby 1.8.5 zu verwenden?
- 12. Ist es in Ordnung, AWT mit JavaFx zu verwenden?
- 13. Ist es in Ordnung, noch Tabellen zu verwenden?
- 14. Ist es in Ordnung, Python 2.7 und 3.5 zu installieren?
- 15. Ist es in Ordnung, alte und neue Stilklassen zu erweitern?
- 16. Ist es in Ordnung, JavaVM * und JNIEnv * als globale Variable zu speichern und anderswo zu verwenden?
- 17. Ist es in Ordnung, folgenden Code in rxjava zu transformieren
- 18. Ist es in Ordnung, Signale und Steckplätze mehrmals zu verketten?
- 19. Ist es in Ordnung, dieselbe Schnittstellendefinition zu verwenden, aber ein anderes Verhalten zu bieten?
- 20. Ist es in MVC in Ordnung, Regex-Muster zu speichern und Validierungsprüfungen in der Ansicht durchzuführen?
- 21. Ist es in C# in Ordnung, eine andere Standardsprache der Benutzeroberfläche als Englisch zu verwenden?
- 22. GruntJS und imagemin, Ist es in Ordnung, 'src' zu überschreiben?
- 23. Ist es in Ordnung, C++ anzupassen?
- 24. Ist es möglich, Benutzerdefinierte Felder in Berichten zu verwenden?
- 25. Ist es in Ordnung, UITableViewCells in einem Array zu speichern?
- 26. Ist es in Ordnung, einige IDs in HTML zu zeigen?
- 27. Warum if (asynchronous.get()) Arbeit und ist es in Ordnung, es auf diese Weise zu verwenden
- 28. Ist es in Ordnung, Destruktor als privat zu deklarieren?
- 29. F #: Ist es in Ordnung, Theorembeweiser zu entwickeln?
- 30. Ist es möglich, die berechneten Eigenschaften zu verwenden, um andere Eigenschaften in Vue zu berechnen?
Seine absolut in Ordnung neu gestaltet werden, um Eigenschaften zu verwenden, ohne private Felder. Sie werden als automatische Eigenschaften bezeichnet. Private Felder sind besonders nützlich, wenn Sie eine zusätzliche Logik in Getter und Setter vor oder nach dem Festlegen des Werts für das private Feld und vor dem Zurückgeben des Werts für das private Feld ausführen möchten. –
Related: http://StackOverflow.com/Q/1277572/380384 – ja72
Darüber hinaus ist es schön, in der Lage zu sein, so etwas mit einer Eigenschaft zu tun: 'public int MyValue {get; privates Set; } '.. jetzt' MyValue' ist eine öffentliche Eigenschaft, die nur 'set'-fähig ist innerhalb der Klasse. – txtechhelp