Abstrakt: |
Zusammen mit .NET 5.0 ist auch die Version 9.0 der Programmiersprache C# einsatzbereit. heise Developer stellt die wichtigsten neuen Sprachfeatures vor.
Das Highlight schlechthin in C# sind Records, mit denen man auf prägnante Weise Klassen mit Wertesemantik definieren kann. Die folgende Programmcodezeile, die aussieht wie ein Konstruktor mit vorangestelltem Schlüsselwort record, deklariert eine Klasse Person mit drei Properties ID, Vorname, Name und Status (Letzteres mit Standardwert):
public record Person(int ID, string Vorname, string Name, string Status = "unbekannt");
Diese Record-Klasse kann man nun wie eine normale Klasse instanziieren:
Person hs = new Person(123, "Holger", "Schwichtenberg");
und die dort enthaltenen Daten über die automatisch erzeugten Properties verwenden:
Console.WriteLine($"Person #{hs.ID}: {hs.Vorname} {hs.Name}");
Einen Unterschied zu einer normalen Klasse merkt man aber sofort, wenn man versucht, einen Property-Wert zu ändern. Diese Zuweisung nach der Instanziierung
hs.Vorname = "Dr. Holger";
erlaubt der Compiler nicht mehr und quittiert das mit dem Fehler
"Error CS8852 Init - only property or indexer 'Person.Vorname' can only be assigned in an object initializer, or on 'this' or 'base' in an instance constructor or an 'init' accessor".
Die Instanzen einer so definierten Record-Klasse sind unveränderlich (immutable) nach der Instanzierung. Das neue Schlüsselwort record ist viel syntaktischer Zucker. Mit einem Decompiler wie dem kostenfreien ILSpy entlarvt man, dass in Wirklichkeit mehr als eine DIN-A4-Seite Programmcode entstanden ist. |