C# 9.0: Neue Features im Überblick
- Matt
Mit der Veröffentlichung von .NET 5 und C# 9.0 hat Microsoft eine Reihe spannender neuer Features eingeführt, die die Entwicklung in C# noch leistungsfähiger und angenehmer machen. In diesem Artikel möchte ich einige der wichtigsten Neuerungen in C# 9.0 vorstellen.
Rekord-Typen
Rekord-Typen sind eine der herausragendsten Neuerungen in C# 9.0. Sie ermöglichen es, unveränderliche Datentypen mit minimalem Boilerplate-Code zu erstellen. Hier ein einfaches Beispiel:
public record Person(string FirstName, string LastName);
Mit nur einer Zeile Code haben wir einen unveränderlichen Datentyp erstellt, der automatisch Methoden wie ToString(), Equals() und GetHashCode() generiert.
Init-Only Setter
Init-Only Setter ermöglichen es, Eigenschaften eines Objekts nur während der Initialisierung festzulegen. Dies fördert die Immutabilität und macht den Code sicherer:
public class Car
{
public string Make { get; init; }
public string Model { get; init; }
}
Mit-Muster
Das Mit-Muster ermöglicht es, ein Objekt basierend auf einem vorhandenen Objekt zu erstellen, wobei einige Eigenschaften geändert werden. Dies ist besonders nützlich in Verbindung mit Rekord-Typen:
var person1 = new Person("John", "Doe");
var person2 = person1 with { LastName = "Smith" };
Verbesserungen bei “pattern matching”
C# 9.0 bringt auch Verbesserungen bei den Musterabgleichen. Neue Muster wie and, or und not ermöglichen komplexere und ausdrucksstärkere Bedingungen:
public static string Classify(object obj) => obj switch
{
int i when i > 0 => "Positive integer",
int i when i < 0 => "Negative integer",
string s => "String",
_ => "Unknown"
};
Top-Level-Statements
Top-Level-Statements ermöglichen es, einfache Programme ohne explizite Main-Methode zu schreiben. Dies ist besonders nützlich für Skripting und kleine Utility-Programme:
using System;
Console.WriteLine("Hello, World!");
Records vs. Klassen
Ein wichtiger Unterschied zwischen Rekord-Typen und regulären Klassen ist, dass Rekord-Typen für unveränderliche Datenstrukturen optimiert sind. Während Klassen in der Regel veränderlich sind, bieten Rekord-Typen eine sicherere und weniger fehleranfällige Alternative.
Fazit
Die meisten dieser Neuerungen sparen Tipparbeit, ohne die Sprache zu verbiegen. Am häufigsten benutze ich Records und Init-Only-Setter, weil sie zusammen genau den Fall abdecken, den man ständig hat: ein Objekt einmal befüllen und danach in Ruhe lassen.
Für weitere Details und eine ausführliche Anleitung zu den neuen Features in C# 9.0 besuche die offizielle Microsoft-Dokumentation.
Die offizielle Übersicht: Neuerungen in C# 9.0.