Microsoft Build 2020: C# 9.0 mit viel Fingerkuppenschonung
Microsoft hat eine erste frühe Vorabversion des C#-Sprachcompilers für die kommende Version 9.0 veröffentlicht und weitere Pläne diskutiert.
- Dr. Holger Schwichtenberg
Im Rahmen der Build-202-Konferenz hat Microsoft einen frühen Einblick in die Entwicklung von C# 9.0 geboten. Das nächste Release der Programmiersprache bietet unter dem Titel "Top-Level-Program" die Option, auf den bisher in den meisten C#-Programmen enthaltenen Main()
-Funktionskopf zu verzichten und einfach "lose" Anweisungen in eine Klasse zu schreiben.
Records als einfache Datenstrukturen
Records sind eine syntaktisch vereinfachte Option zum Erstellen von Datenstrukturen. Diese wird mit data class
deklariert und "Record" genannt. Eine Property mit init
anstelle von set
lässt sich nur zur Initialisierungszeit setzen und ist danach unveränderbar. Mit dem Schlüsselwort with
im Rahmen einer Zuweisung können Entwickler eine flache Objektkopie (also ohne Unterobjekte wie bei structs) anlegen. Geplant ist, aber noch nicht realisiert ist, dass in einem Record ein Datenmitglied automatisch "public" ist:
data class Person { string Firstname; string LastName }
wird dann gleichbedeutend mit dem, was man in der folgenden Abbildung sieht.
Eine weitere mögliche Schreibweise soll
data class Person(string Firstname, string LastName)
werden. Die Vererbung mit Records ist möglich.
Pattern Matching
Eine weitere Überarbeitung in C# 9.0 ist die nochmalige Erweiterung des Pattern Matching. Die kommende Abbildung zeigt ein Beispiel in einer Switch Expression, die in C# 8.0 eingeführt wurde. Die darauf folgende Abbildung verdeutlicht weitere syntaktische Vereinfachungen in C# 9.0, gezeigt im Build-2020-Vortrag "C# Today & Tomorrow – Live" von Mads Torgersen.
So kann man nun den Klassennamen nach dem Schlüsselwort new
weglassen, wenn Entwickler den Datentyp schon bei der Deklaration der Variablen klargestellt haben:
Person p3 = new(123)
Bisher konnte man schreiben
// Seit C# 1.0
Person p1 = new Person(123);
oder
// Seit C# 3.0
var p2 = new Person(123);
wobei die letztere Schreibweise mit var
in vielen Entwicklungsteams zu großen Diskussionen geführt hat, obwohl sie zur Laufzeit äquivalent ist und keineswegs gleichbedeutend mit Variant
in Visual Basic.
Sprachfeatures im Browser testen
Die Vorschauversion von C# 9.0, die aber noch nicht alle genannten Neuerungen enthält, bekommt man als Teil des .NET 5.0 Preview 4 Software Development Kit (SDK) und mit der Visual Studio 2019 Version 16.7 Preview. Einige der neuen Sprachfeatures sind in Entwicklungszweigen des C#-Compilers enthalten. Diese kann man auf der Website sharplab.io ausprobieren. Die folgende Abbildung zeigt ein Beispiel mit einem Record und der verkürzen new
-Schreibweise links und den resultierenden ausführlichen C#-Code rechts.
Die fertige Version von C# 9.0 soll am 10. November 2020 zusammen mit .NET 5.0 erscheinen. Die Zwischenstände können Interessierte im "Language Feature Status" verfolgen.
[Update 21.5.2020, 10.50 Uhr:] C# 9.0 wird nur für .NET Core und ab .NET 5.0 verfügbar sein, nicht für das klassische .NET Framework. Das hat Scott Hunter, Director Program Management bei Microsoft, heute auf Nachfrage in "The next phase of .NET" bestätigt. Mittlerweile gibt es auch einen Blogeintrag zu C# 9.0; dieser schweigt sich aber zur Plattformverfügbarkeit der neuen Sprache aus. Bereits für C# 8.0 galt, dass einige Sprachfeatures nicht mehr auf dem klassischen .NET Framework verfügbar waren, dessen letzte Version 4.8 im April 2019 erschienen ist.
(ane)