Neu in .NET 9.0 [3]: Features in der Programmiersprache C# 13.0
Die Programmiersprache C# 13.0 ist zusammen mit Visual Studio 2022 Version 17.12 und .NET 9.0 am 12. November 2024 erschienen.
(Bild: Pincasso/Shutterstock)
- Dr. Holger Schwichtenberg
Das neue C# 13.0 unterstĂĽtzt Microsoft offiziell erst ab .NET 9.0 ("C# 13.0 is supported only on .NET 9 and newer vesions.").
C# 13.0 in älteren .NET-Versionen
Man kann allerdings die meisten Sprachfeatures aus C# 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>
Videos by heise
Damit Sprachfeatures auch in Versionen vor .NET 9.0 funktionieren, dürfen sie keine Abhängigkeit von in .NET 9.0 eingeführten Basisbibliotheksklassen haben. Sofern man <LangVersion>latest</LangVersion> in der Projektdatei setzt, 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
Zu beachten ist aber, dass es für den Einsatz der neuen Sprachfeatures in .NET-Versionen vor 9.0 keinen technischen Support von Microsoft gibt, man also bei Problemen nicht den Support-Vertrag nutzen kann, 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.
Stabile neue Sprachfeatures in C# 13.0
In C# 13.0 sind folgende neue Sprachfeatures erschienen, die ich in den kommenden Wochen in dieser Blogserie besprechen werde:
- Partielle Properties und partielle Indexer,
- neues ESCAPE-Zeichen
\efür ANSI/VT100 Terminal Control Escape Sequences, - Prioritäten für Methodenüberladungen,
- Generische Mengentypen bei
params, - Objekt-Initialisierung mit Index-Operator vom Ende,
- Neue Klasse
Threading.LockfĂĽrlock-Anweisungen und - Erweiterungen fĂĽr
ref structs(auf Stack).
Experimentelles Sprachfeature in C# 13.0
Ein weiteres Sprachfeature ist in C# 13.0 in experimenteller Form enthalten: halbautomatische Properties mit dem neuen SchlĂĽsselwort field. Dieses SchlĂĽsselwort ist nur verfĂĽgbar, wenn man in einer Projektdatei entweder <EnablePreviewFeatures>True</EnablePreviewFeatures> oder <LangVersion>preview</LangVersion> setzt.
Vertagte neue Sprachfeatures
Folgende Sprachfeatures waren fĂĽr C# 13.0 geplant und zum Teil schon als Prototyp verfĂĽgbar, wurden aber dann auf C# 14.0 vertagt, das im November 2025 erscheinen soll :
- Tupel-Dekonstruktion
(int x, string y) = defaultstatt(default, default) - Automatische Konvertierung zwischen
Array,Span<T>undReadOnlySpan<T> - Extensions: eine weiterentwickelte, generalisierte Form der Extension Methods, bei der man nicht nur Instanzmethoden, sondern Methoden und Properties sowohl auf Instanz- als auch Klassenebene ("static") ergänzen kann. Dazu will Microsoft das neue Schlüsselwort
extensioneinfĂĽhren.
Breaking Changes in C# 13.0
Es gibt einige wenige Breaking Changes im Verhalten des Compilers in C# 13.0 gegenüber C# 12.0. Dabei handelt es sich jedoch um Sonderfälle von geringer Bedeutung, beispielsweise das Verbot der Annotation [InlineArray] auf record struct).
(rme)