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].
- 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.