auf pid Antwort zu erweitern: haben die Semantik von
test = new Testing { s = hello }
angegeben:
Testing temp = new Testing();
temp.s = "hello";
test = temp;
Der Standardkonstruktors eines Werttyps als Konstrukteur dokumentiert wird, die setzt alle Felder der Instanz auf ihre Standardwerte.
Allgemeiner die Sprache C# erfordert, dass jeder Konstruktor einer Werttyp die Eigenschaft haben, dass alle Felder definitiv zugewiesen werden, bevor der Konstruktor normalerweise beendet.
Nun, wenn kein Konstruktor aufgerufen wird, gibt es zwei Fälle. Wenn die Variable anfänglich zugewiesen ist, verhält sich die Variable genauso, als ob der Standardkonstruktor aufgerufen wurde.Zum Beispiel, wenn Sie sagen,
Testing[] test = new Testing[1];
Dann wird test[0]
auf den Standardwert initialisiert das gleiche wie wenn Sie
Testing[] test = new Testing[1] { new Testing() };
gesagt hatte Wenn die Variable zunächst nicht zugeordnet ist, zum Beispiel ein lokale Variable, dann Sie sind erforderlich, um alle Felder definitiv zuzuweisen, bevor Sie sie lesen. Das heißt, wenn wir eine lokale haben:
Testing test;
test.s = "hello";
Console.WriteLine(test.d); // ERROR, test.d has not been written yet.
Beachten Sie auch, dass muable Strukturen eine schlechteste Übung in C# sind. Erstellen Sie stattdessen einen öffentlichen Konstruktor, der alle Felder festlegt, die Felder als privat definiert und die Eigenschaften-Getter darüber platziert.