C# 13.0

Eintrag zuletzt aktualisiert am: 11.11.2024

C# 13.0 ist zusammen mit Visual Studio 2022 Version 17.12 und .NET 9.0 am 12. November 2024 erschienen.

C# 13.0 wird offiziell von Microsoft erst ab .NET 9.0 unterstützt ("C# 13.0 is supported only on .NET 9 and newer versions." [docs.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version].

Neuerungen in C# 13.0

  • Partielle Properties und partielle Indexer: public partial int ID { get; set; }
  • Prioritäten für Methodenüberladungen: [OverloadResolutionPriority]
  • Mengentypen bei params: IEnumerable<T>, List<T>, Span<T> u.a. bei params statt nur Arrays
  • Neues ESCAPE-Zeichen für ANSI/VT100 Terminal Control Escape Sequences: \e statt \u001b oder \U0000001b
  • Neue Klasse System.Threading.Lock für lock-Statements
  • Objekt-Initialisierung mit Index-Operator vom Ende [^x]
  • Erweiterungen für ref structs (auf Stack): Schnittstellen implementieren, Verwenden in Iteratoren und als Typargument sowie synchronen Methoden, die Task oder Task<T> liefern

Neue Möglichkeiten für ref struct

Seit C# 7.2 gibt es Strukturen, die immer auf dem Stack leben und niemals auf den Heap wandern können: ref struct. In C# 13.0 hat Microsoft den Einsatz von ref struct erweitert. Solche Typen mit können nun:
  • Schnittstellen implementieren (Allerdings gilt die Einschränkung, dass die Struktur nicht in den Schnittstellentyp konvertiert werden kann!)
  • als Typargument genutzt werden (Allerdings muss dazu der generische Typ bzw. die generische Methode where T : allows ref struct verwenden!).
  • in Iteratoren verwendet werden.
  • in synchronen Methoden, die Task oder Task<T> liefern, genutzt werden.

Weiterhin gilt aber: Wenn man einen Typen als ref struct deklariert, ist ein Boxing nicht mehr möglich. Der Einsatz von ref struct ist daher begrenzt, z.B. kann man kein Array und keine List<T> etc. daraus erzeugen.

TIPP: C# 13.0 in älteren .NET-Versionen

Man kann allerdings die meisten C# 13.0-Sprachfeatures auch in älteren .NET-Versionen einschließlich .NET Framework, .NET Core und Xamarin nutzen. Dazu muss man die verwendete Compilerversion per Tag <LangVersion> in der Projektdatei (.csproj) auf "13.0" erhöhen.
<LangVersion>13.0</LangVersion>

Nur diejenigen neuen Sprachfeatures funktionieren auch in .NET-Versionen vor .NET 9.0, die keine Abhängigkeit von erst in .NET 9.0 eingeführten Basisbibliotheksklassen haben. Sofern man <LangVersion>latest</LangVersion> setzt in der Projektdatei, sind in älteren Versionen folgende neuen Sprachfeatures von C# 13.0 möglich:
  • Partielle Properties und partielle Indexer
  • Generische Mengen in Verbindung mit dem Schlüsselwort params
  • Neuerungen für ref struct, außer der Verwendung als Typargument
  • Escape-Zeichen \e

Hinweis: Bitte beachten Sie aber, dass es für den Einsatz von C# 13.0-Sprachfeatures in .NET-Versionen vor 9.0 keinen technischen Support von Microsoft gibt, d.h. falls Sie Probleme damit haben, können Sie nicht Ihren Support-Vertrag nutzen, um Microsoft um Hilfe zu ersuchen. Dennoch ist der Einsatz höherer C#-Versionen in älteren .NET-Projekten in einigen Unternehmen gängige und problemlose Praxis.