Programmiersprache: Das fertige C# 10 läuft nicht nur auf .NET 6
Zusammen mit .NET 6 ist die zehnte Version von C# erschienen. Neben Vereinfachungen bei den Namensräumen bietet es syntaktische Zuckerstückchen für Entwickler.
- Dr. Holger Schwichtenberg
C# 10.0 ist gleichzeitig mit .NET 6 erschienen, und es ist implementiert in der Version 4.0 der neueren, Roslyn-basierten Variante des C#-Sprachcompilers. Die zehnte Version der Programmiersprache wird offiziell von Microsoft nur zur Verwendung mit .NET 6 unterstützt. Allerdings kann man die meisten Sprachfeatures auch in .NET Core, .NET Framework, Mono und Xamarin nutzen, indem man die <LangVersion> in der Projektdatei (.csproj) auf 10.0 stellt. Einen Überblick über die neuen Sprachfeatures bietet Abbildung 1:
Vereinfachungen für Namensräume
Bei den syntaktischen Vereinfachungen hat sich Microsoft dieses Mal insbesondere auf die Namensräume gestürzt. Mit globalen Namensräumen (global using Name.Name.Name;
) lässt sich vermeiden, in jeder C#-Datei immer wieder gleiche using
-Zeilen zu schreiben. Mit der Aktivierung der impliziten Namensräumen in der Projektdatei können Entwickler eine Reihe üblicher Namensräume aus der .NET-Klassenbibliothek automatisch importieren, unter anderem System, System.IO, System.Linq und System.Threading.Tasks.
Am 23. November 2021 veranstalten Heise und Dr. Holger Schwichtenbergs Firma IT-Visions.de ein Online-Event zum neuen LTS-Relase: .NET 6 ist die Basis für alle Programme, die auf Microsofts Entwicklungsplattform aufbauen. Die Online-Konferenz verschafft einen Überblick und hilft beim Abwägen, ob sich der Wechsel bereits lohnt.
Darum geht es:
- Migration: Wann und wie man auf .NET 6 umsteigen sollte
- Was ist neu in .NET 6?
- Neue Features von ASP.NET Core 6 und Blazor 6 kennen lernen
- Wichtigste Neuerungen in C# 10
- WinUI 3 in den eigenen Anwendungen einsetzen
- Ausblick auf .NET 7
Ein Tag geballte .NET-Erfahrung
Ausgewiesene .NET- und C#-Experten präsentieren einen Tag lang online die Neuigkeiten der LTS-Version und beantworten in den Talks sowie direkten Fragerunden die Anliegen der Teilnehmenden rings um das neue Release und die anstehende Migration. Neben sieben 45-minütigen Fachvorträgen moderiert Dr. Holger Schwichtenberg eine Frage- und Diskussionsrunde. Flankierend lässt sich am 25. November das Gelernte in einem Praxis-Workshop bei ihm vertiefen (der Workshop ist ausverkauft, Interessierte können sich auf die Warteliste setzen lassen).
Konferenztickets sind zum Preis von 199 Euro (zzgl. 19 % MwSt.) erhältlich, und für Gruppen, Schüler sowie Studierende gibt es auf Nachfrage einen Nachlass. Weitere Informationen lassen sich dem Konferenzprogramm entnehmen.
Während Namensräume bisher immer mit geschweiften Klammern um die Typdeklarationen herum zu schreiben waren, können Entwickler nun auf Dateiebene einen Namensraum mit der Anweisung namespace Name.Name.Name;
für eine ganze Datei festlegen. Damit entfällt eine Einrückungsebene, zumal die meisten C#-Dateien sowieso nur einen Namenraum deklarieren.
Record-Typen auch auf dem Stack
Die in C# 9.0 eingeführten prägnanten Record-Typen, die bisher immer Klassen auf dem Heap-Speicher waren, gibt es jetzt auch als record struct
für den Stack. Während bei einer record class
die per Primärkonstruktor erzeugten Properties nach der Konstruktionsphase immer unveränderbar (Immutable
) sind, hat man bei dem neuen Typus die Wahl zwischen Veränderbarkeit (record struct
) oder Unveränderbarkeit (record readonly struct
).
Record-Typen können die Methode ToString()
mit dem Zusatz sealed
versehen, um zu verhindern, dass erbende Record-Typen sie überschreiben.
Erweiterung bestehender Sprachfeatures
Interpolated Strings, die Microsoft schon in C# 6.0 eingeführt hatte, können C#-Entwickler nun auch für die Wertzuweisung an Konstanten verwenden. Voraussetzung ist allerdings, dass die verwendeten Platzhalter allesamt zuvor mit Konstanten befüllt werden.
Das Extended Property Pattern erlaubt bei Vergleichen statt { Prop1: { Prop2: pattern } }
in C# 10.0 auch den Einsatz der kompakteren Punktnotation: { Prop1.Prop2: pattern }
.
Das Feature "Mixed Deconstructions" gestattet eine Mischung von Zuweisung und Initialisierung in Tupel-Dekonstruktion: (x, int y) = point
.
Bei Lambda-Ausdrücken können Entwickler das var
-Schlüsselwort verwenden und dabei die neue Typherleitung für Lambdas einsetzen oder auch explizit einen Rückgabetyp angeben. Auch Annotationen (".NET-Attribute") für Parameter und Rückgabetyp von Lambda-Ausdrücken unterstützt die neue Version.
Die in C# 9.0 eingeführten Sourcecode-Generatoren können nun mit der neuen Schnittstelle Microsoft.CodeAnalysis.IIncrementalGenerator
inkrementell und somit schneller arbeiten.
Lesen Sie auch
Visual Studio 2022 läuft nun mit 64 Bit
Ausblick: Fachartikel und Bezugsquellen
In der kommenden Woche wird auf heise Developer ein längerer Fachbeitrag veröffentlicht, der die Sprachfeatures von C# 10 ausführlich vorstellt. Wer sich vorab bereits umschauen und ausprobieren möchte: Version 4 der Roselyn-basierten Compilervariante ist erhältlich im .NET 6 SDK oder eigenständig im NuGet-Paket Microsoft.Net.Compilers. Zudem ist der C#-10-Compiler im am Montag erschienenen Visual Studio 2022 v17.0 enthalten.
(sih)