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.

Lesezeit: 2 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 53 Beiträge
Update
Von

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.

News von der Build 2020

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.

Ein Top-Level-Program mit Record in C# 9.0

(Bild: Microsoft )

Eine weitere mögliche Schreibweise soll

data class Person(string Firstname, string LastName)

werden. Die Vererbung mit Records ist möglich.

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.

Pattern Matching in C# 9.0

(Bild: Microsoft )

Weitere neue Sprachfeatures in C# 9.0

(Bild: Microsoft )

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.

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.

Den Entwicklungszweig "C# 9.0 Records" im Browser getestet

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)