ist nur syntaktischer Zucker (d.h. Kurzschrift) für
%Vor%Ein Unterschied zwischen den beiden ist, dass Sie readonly Felder aus dem Konstruktor, aber nicht mit der Kurzschrift.
Ein zweiter Unterschied besteht darin, dass ein Konstruktor mit Parametern den Client zwingt, diese Werte anzugeben. Siehe Konstruktor-Injektion vs. Setter-Injektion für ein gutes Stück Hintergrundlesung.
Dies baut das Objekt und macht etwas mit den Werten im Konstruktor. Vielleicht legt es die Werte nicht fest. Es hängt von der Logik im Konstruktor ab.
%Vor%Dies ist das Konstruieren des Objekts mit dem Standardkonstruktor und das Festlegen von Anfangswerten für Eigenschaften, nachdem das Objekt erstellt wurde. In diesem Szenario hat das Festlegen der Werte nichts mit dem Konstruktor zu tun, außer der Tatsache, dass es sich in derselben Anweisung befindet. Es ist das gleiche wie:
%Vor%Was an dieser Syntax gut ist, ist Folgendes:
%Vor%anstatt tun zu müssen:
%Vor%weil die Initialisierung der Variablen ohne Berührung der Variablenzuordnung erfolgt.
Die zweite Form
%Vor%ist die Syntax für
%Vor%Der entscheidende Punkt ist, dass die Einstellung der Werte nicht Teil des Konstruktors ist.
Beide sind nicht dasselbe.
Dies ruft den Klassenkonstruktor auf:
%Vor%Und das ist ein Inline-Objektinitialisierer:
%Vor%Zuerst wird sichergestellt, dass eine Instanz von MyObject während der Bauzeit zwei ganzzahlige Eingabeparameter benötigt, während die andere nur einige Felder oder Eigenschaften nach der Bauzeit initialisiert. Letzteres behält die Freiheit, solche Eigenschaften und / oder Felder nicht unbedingt zu initialisieren.
Der erste ist ein Parameter ctor
%Vor%Der zweite ist der Standardwert (Nullparameter) ctor, aber sobald der ctor beendet ist, werden val1 und val2 mit den angegebenen Werten initialisiert
%Vor%Sie können auch die zweite ohne die geschweiften Klammern aufrufen. ZB
%Vor%Tags und Links .net c# constructor