Ich versuche, ein Stück Code aus einem Buch zu entschlüsseln:
List<Person> people = new List<Person>()
{
new Person {FirstName="Homer",LastName="Simpson",Age=47},
new Person {FirstName="Marge",LastName="Simpson",Age=45}
};
Person ist nur eine einfache Klasse, die sie gemacht haben, mit einer Reihe von Feldern: Name, Nachname, etc ...
Was ich nicht verstehe, ist, senden wir nicht Parameter in nicht geschweiften Klammern an einen Konstruktor von Person? Ich habe versucht, diesen Code zu replizieren, aber er scheint nicht zu funktionieren.
Danke für die Eingabe.
Antworten:
Mit C # können Sie Eigenschaftsparameter in geschweiften Klammern angeben, wenn das Objekt initialisiert wird. Auf diese Weise können Sie auswählen, welche Elemente initialisiert und welche als Standardeinstellungen beibehalten werden sollen.
Ein Konstruktor führt dagegen einen einzelnen Codeblock mit einem festen Satz von Parametern aus. Um den gleichen Effekt zu erzielen, müssten Sie mehrere Konstruktoren mit den verschiedenen Kombinationen von Eigenschaften erstellen, die Sie möglicherweise initialisieren möchten. Dies kann mühsam sein.
ist genau gleichbedeutend mit:
Abgesehen davon, dass es kürzer ist und die Augen besser schont.
Es können auch Konstrukte verwendet werden, wie Sie in Ihrer Frage gezeigt haben. Dies wäre sehr mühsam, wenn Sie temporäre Variablen erstellen und wie hier beschrieben initialisieren müssten, bevor Sie sie zur Liste hinzufügen. (So mussten Sie es früher tun.) Alles ohne einen explizit definierten Konstruktor, der die gewünschte Liste von Parametern aufnimmt, die möglicherweise verfügbar sind oder nicht.
Beachten Sie auch, dass ein Konstruktor zwar Eigenschaften mit einem privaten Setter initialisieren kann, diese Technik (wie aus dem bereitgestellten Beispiel ersichtlich sein sollte) jedoch nur funktioniert, wenn Sie einen öffentlichen Setter für die Eigenschaft haben. Beachten Sie auch, dass mein verkürztes Beispiel implizit den Standardkonstruktor (ohne Parameter) nennt, der daher vorhanden sein müsste.
quelle
new Person(lastName: "Simpson")
, die das WeglassenfirstName
undage
Parameter.var x = new Person("Homer", "Simpson", 47);