Konstruktoren und Initialisierer in C # [duplizieren]

7

In c # können Sie ein Objekt wie:

konstruieren %Vor%

Mit:

%Vor%

oder mit:

%Vor%

Was ist der Unterschied zwischen diesen Konstruktoren?

    
Caipivara 19.04.2011, 14:17
quelle

6 Antworten

18
%Vor%

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.

    
RB. 19.04.2011, 14:19
quelle
7

Der Unterschied ist wahrscheinlich, dass die zweite nicht kompiliert wird.

Sie vermissen einen Standardkonstruktor, den Sie in Ihrem zweiten Beispiel aufrufen.

    
Arcturus 19.04.2011 14:20
quelle
4
%Vor%

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.

    
kemiller2002 19.04.2011 14:19
quelle
1

Die zweite Form

%Vor%

ist die Syntax für

%Vor%

Der entscheidende Punkt ist, dass die Einstellung der Werte nicht Teil des Konstruktors ist.

    
Scott Weinstein 19.04.2011 14:20
quelle
1

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.

    
Matías Fidemraizer 19.04.2011 14:23
quelle
1

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%     
joe_coolish 19.04.2011 14:20
quelle

Tags und Links