C# 11.0 ist die 11. Version der Sprachsyntax der Programmiersprache C# von Microsoft.

Fakten zu C# 11.0

  • C# 11.0 ist der Nachfolger von C# 10.0.
  • C# ist am 8.11.2022 zusammen mit .NET 7.0 erschienen.
  • C# 11.0 wird von Microsoft offiziell nur in Verbindung mit .NET 7.0 unterstützt. C# 11.0 lässt sich aber auch auf älteren .NET-Versionen nutzen, für diese Konstellation bietet Microsoft jedoch keinen technischen Support.

Liste der wesentlichen Neuerungen in C# 11.0

Datentypen
  • Datentypaliases nint und nuint,
  • Zeilenumbrüche innerhalb von Interpolationsausdrücken
  • Raw Literal Strings
  • UTF8-Zeichenketten (UTF-8 String Literals)

Klassendefinition
  • Warnungen bei Typnamen komplett Kleinbuchstaben
  • File-local Types
  • Pflichtmitglieder (Required Members)

Schnittstellen
  • Statische abstrakte Properties und Methoden in Schnittstellen

Annotationen/.NET-Attribute
Strukturen
  • Auto-Defaults Structs

Operatoren
  • nameof() für Parameternamen in Annotationen
  • Checked user-defined Operators
  • Pattern Matching für Listen und Teilmengen (List Pattern und Slice Pattern)
  • Pattern Matching für Span<char> und ReadonlySpan<char>
  • Generische Mathematik

Details zu C# 11.0

C# 11.0 bietet drei Neuerungen für Zeichenketten: Mit Raw Literal Strings gibt es eine neue Möglichkeit für die Festlegung von Zeichenketten ohne Steuerzeichen, aber mit Zeilenumbrüchen. Ebenso dürfen Entwickler nun Zeilenumbrüche innerhalb von Interpolationsausdrücken in Zeichenketten nutzen. Mit dem Suffix u8 wandelt sich eine Zeichenkette zu einem Byte-Array von UTF8-codierten Zeichen.

Typdeklarationen dürfen in C# 11.0 den Sichtbarkeitsmodifizierer file besitzen. Diese Typen sind dann nur innerhalb der aktuellen Datei sichtbar. In Strukturen initialisieren sich alle nicht explizit initialisierten Felder und Properties automatisch mit Standardwerten. Bei Klassen-, Struktur- und Record-Definitionen ist in Properties und Fields nun der Modifizierer required verwendbar, was die Entwickler zum Setzen dieser Daten im Konstruktor oder Objekt-Initialisierer zwingt. In Schnittstellendefinitionen ist der Zusatz static abstract erlaubt, was die Definition von Operatorüberladungen in Schnittstellen erlaubt. Die neuen Schnittstellen für generische Mathematik im Namensraum System.Numerics (z.B. Inumber<Tself>, IAdditionOperators<Tself,Tother,Tresult> und ILogarithmicFunctions<Tself>), mit denen mathematische Operation unabhängig vom Zahlentyp implementierbar sind, basieren auf Operatoren in den Schnittstellen. Attributdefinition dürfen auch Typparameter besitzen: public class GenericAttribute<T> : System.Attribute { }

Die Schlüsselwörter nint und nuint bilden neue Aliase für die Typen System.IntPtr und System.UIntPtr. Die .NET-Klassenbibliothek bietet neue Ganztypzahlen mit zwei Bytes (System.Half) sowie 16 Bytes (System.Int128 und System.UInt128).

Bei den Operatoren hat Microsoft das Pattern Matching um den Vergleich mit Listen erweitert. Auch das Extrahieren von Elementen aus Listen ist möglich. Zudem gibt es eine neue Art der Deklaration generischer mathematischer Operationen, die dann mit beliebigen Zahlentypen verwendet nutzbar sind.

Für die funktionale Programmiersprache F# gibt es weniger Neuerungen [https://devblogs.microsoft.com/dotnet/announcing-fsharp-7/]. Auch dort ist in Schnittstellen nun static abstract möglich. Die Syntax von Statically Resolved Type Parameters hat Microsoft vereinfacht. Bei der Nutzung von C#-Assemblies in F# beachtet F# die Anforderung required.