Einsprungmethode Main() ist nicht mehr verpflichtend. Man kann auch direkt „freien“ Programmcode in eine beliebige .cs-Datei schreiben. Es darf in einem C#-Projekt nicht mehr als eine Datei geben, die solch freien Code enthält! Falls es ein Top-Level-Statement und ein Main() gibt, wird void Main() ignoriert.
class Person {
public int ID { get; init; }
… }
Eine Init Only Property kann man nur noch an zwei Stellen setzen:
1. Konstruktor der Klasse:
public Person(int ID)
{ this.ID = ID; }
…
Person hs1 = new Person(123);
2. Objektinitialisierung direkt bei der Instanziierung:
Person hs2 = new Person() { ID = 123 } ;
Beides kann kombiniert werden:
Person hs3 = new Person(123) { ID = 456 };
Untertyp von Klassen mit Codegenerierung durch Compiler
Wertesemantik bei Vergleich mit == und !=
Inhaltskopie mit with (nur oberste Ebene)
ToString() liefert Inhalt aller öffentlichen Fields und Properties (nur oberste Ebene)
Immutability möglich mit Init Only Properties
Vererbung von anderen Record-Typen möglich
record Person(int ID, string Vorname, stringName, string Status = "unbekannt");
Erbender Record-Typ:
record Dozent(int ID, string Vorname, string Name, string Status = "unbekannt", List<string> Themen = null) : Person(ID, Vorname, Name, Status);
record Person {
private int ID { get; init; }
public string Vorname { get; init; }
public string Name { get; init; }
public string Status { get; init; } = "unbekannt";
public Person(int id, string vorname, string name, string status = "unbekannt") {
this.ID = id;
this.Vorname = vorname;
this.Name = name;
this.Status = status;
}
}
Erbender Record-Typ:
record Dozent : Person {
public List<string> Themen { get; init; } = new();
public Dozent(int id, string vorname, string name, List<string> themen) : base(id, vorname, name) { this.Themen = themen;
}
}
Dieser Record-Typ ist nicht immutable, da es eine beschreibbare Property und ein beschreibbares Field gibt.
record Person(int ID, string Vorname, string Name, string Status = "unbekannt") {
public Geschlecht Geschlecht { get; set; }
public int Alter;
public string GetAnrede() => Geschlecht switch {
Geschlecht.f => "Sehr geehrte Frau " + Name,
Geschlecht.m => "Sehr geehrter Herr " + Name,
_ => "Hallo " + Name
};
}
Record-Instanz erzeugen:
Person hs = new Person(123, "Holger", "Schwichtenberg...