Mögliche Duplizieren zu initialisieren: über Codierpraktiken
Initialize class fields in constructor or at declaration?Ist es schlechte Praxis Bereichen außerhalb eines expliziten Konstruktor
Wir streiten. Die Beispiele hier sind ein wenig zu einfach, aber das wirkliche Geschäft hat mehrere Konstruktoren. Um die einfachen Werte (z. B. Datumswerte auf ihren minimalen Wert) zu initialisieren, habe ich den Code aus den Konstruktoren in die Felddefinitionen verschoben.
public class ConstructorExample
{
string _string = "John";
}
public class ConstructorExample2
{
string _string;
public ConstructorExample2()
{
_string = "John";
}
}
Wie sollte es durch das Buch getan werden? Ich tendiere dazu, von Fall zu Fall sehr viel zu sein und bin daher vielleicht etwas lax über diese Art von Dingen. Ich denke jedoch, dass der Occams-Rasierer mir sagt, ich solle die Initialisierung von mehreren Konstruktoren entfernen. Natürlich könnte ich diese gemeinsame Initialisierung immer in eine private Methode umsetzen.
Die Frage ist im Wesentlichen ... ist die Initialisierung von Feldern, wo sie im Gegensatz zu dem Konstruktor schlecht in irgendeiner Weise definiert sind?
Das Argument, mit dem ich konfrontiert bin, ist einer der Fehlerbehandlung, aber ich denke nicht, dass es relevant ist, da es keine möglichen Ausnahmen gibt, die zur Kompilierzeit nicht aufgenommen werden.
mögliche Duplikate von [Best Practice: Klassenfelder im Konstruktor oder bei der Deklaration initialisieren?] (Http://stackoverflow.com/questions/2451/best-practice-initialize-class-fields-in-constructor-or-at -declaration) –
es ist, aber ich finde die Antworten in diesem Thread nicht überzeugend sein - das erste ist ein wenig dogmatisch. Der Verweis auf FXCop ist ein starkes Argument, ebenso wie das Maintenance- und Konstruktor-Chaining-Argument, aber abgesehen davon nichts zu sachliches. –
Für einige interessante Konsequenzen der feinen Unterschiede zwischen der Initialisierung im Feld und im Körper, siehe http://blogs.msdn.com/ericlippert/archive/2008/02/15/why-do-initializers-run-in-in- die-entgegengesetzte-Reihenfolge-als-Konstruktoren-Teil-One.aspx und http://blogs.msdn.com/ericlippert/archive/2008/02/18/why-do-initializers-run-in-the-opposite- order-as-constructors-part-two.aspx –