© jörg röse-oberreich/shutterstock.com
Infografik

Spickzettel C# 9.0


Top-Level-Statements

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.

Init Only Properties/Init Only Setter

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 };

Record-Typen

  • 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

Kurzschreibweise für Record-Typen (immutable)

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); 

Langschreibweise für Record-Typen (immutable)

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; } }

Mischung aus Kurzschreibweise und Langschreibweise

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-Typen verwenden

Record-Instanz erzeugen:

Person hs = new Person(123, "Holger", "Schwich...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang