C# 9.0: Neue Features im Überblick

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.