würde die nächste Sache, ein Konstruktor mit optionalen Parametern sein:
class Contact
{
public string Name { get; }
public string Address { get; }
public Contact(string name = null, string address = null) {
Name = name;
Address = address;
}
}
Dann können Sie es mit Parameternamen nennen:
new Contact(
name: "John",
address: "23 Tennis RD"
)
Die Syntax von einem Objekt initializer ist etwas anders, aber es ist genauso lesbar; und IMO, der Unterschied ist eine gute Sache, weil Konstruktor-Parameter dazu neigen, unveränderliche Eigenschaften vorzuschlagen. Und Sie können die Parameter in beliebiger Reihenfolge angeben, oder lassen Sie einige aus, so ist es genauso leistungsfähig wie Objektinitialisierersyntax.
Dies erfordert einige zusätzlichen Code (Definieren des Konstruktors, Zuweisen aller Eigenschaften), also ist es mehr Arbeit als Objektinitialisierersyntax. Aber nicht zu schrecklich, und der Wert von unveränderlichen Objekten ist es wert.
(Für was es wert ist, 7 C# immutable "record types" die viel einfachere Syntax bekommen können diese möglicherweise nicht in die endgültige Version machen, aber sie klingen ziemlich cool..)
ich Setter muss - nein es tut nicht! Es erfordert Schreibzugriff auf das Feld oder die Property. Im Falle einer Eigenschaft benötigt es tatsächlich einen Setter. Im Falle eines Felds kann es nicht nur statisch oder schreibgeschützt sein. –
Korrekt. Grund, warum ich sagte: "dann Eigenschaftswerte setzen, erfordert Setter". Selbst bei einem öffentlichen Setter würde, wenn das Hintergrundfeld nur gelesen wurde, der Versuch, darauf zu schreiben, nicht einmal kompiliert werden. –