© deomis/Shutterstock.com
Ausgewählte Neuerungen der Version 9.0 von C#

Der neunte Streich


Die Programmiersprache C# gilt inzwischen als ausgereift. Dennoch gibt es mit dem Update auf .NET 5.0 auch hier einen Nachschlag in Form von C# 9.0. Lesen Sie, welche Features Ihren Programmieralltag bereichern können.

Im Jahr 2002 lieferte Microsoft mit dem .NET Framework 1.0 auch die erste Version der Programmiersprache C# aus. Sie greift Konzepte unterschiedlicher Programmiersprachen auf, darunter Java, C++, Haskell, C und Delphi. Architekt der Sprache war Anders Hejlsberg, aktuell ist Mads Torgersen der verantwortliche Entwickler für C#. Nunmehr geht die Sprache in die neunte Runde und bietet einige neue Features. In der Dokumentation von Microsoft [1] werden die folgenden neuen Sprachfeatures genannt:

  • Datensätze

  • init-only-Setter

  • Top-Level-Anweisungen

  • Verbesserungen am Musterabgleich

  • Integerwerte mit nativer Größe

  • Funktionszeiger

  • Unterdrücken der Ausgabe des Flags localsinit

  • zieltypisierte neue Ausdrücke

  • statische anonyme Funktionen

  • bedingter Ausdruck mit Zieltyp

  • kovariante Rückgabetypen

  • Unterstützung für die Erweiterung GetEnumerator in foreach-Schleifen

  • Parameter zum Verwerfen von Lambdafunktionen

  • Attribute in lokalen Funktionen

  • Modulinitialisierer

  • neue Features für partielle Methoden

Blickt man in die Dokumentation, dann findet man noch nicht zu allen Neuentwicklungen entsprechende Konkretisierungen. In diesem Artikel betrachten wir die folgenden Features: init-only-Setter, Top-Level-Anweisungen, Datensätze und die Möglichkeit einer flexibleren Verwendung des new-Ausdrucks.

Die Sprachversion C# 9.0 aktivieren und verwenden

Die Sprachversion von C# korrespondiert mit der Version des .NET Frameworks. Man kann zwar die Sprachversion des Compilers unabhängig davon im Projekt anpassen, jedoch kann dann nicht sichergestellt werden, dass man zum Beispiel Sprachfeatures wie Datentypen verwendet, die nicht im Ziel-Framework vorhanden sind. Tabelle 1 zeigt die Zuordnung von Ziel-Framework, Version und der Standardversion der Sprache C#. Möchten Sie wissen, welche Versionen von C# auf Ihrer Entwicklermaschine verfügbar sind, dann wechseln Sie in die Developer-Eingabeaufforderung für Visual Studio (zu erreichen über das Startmenü) und führen Sie folgenden Befehl aus:

csc -langversion:?

Wir erhalten eine Ausgabe der folgenden Form (Auszug):

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community>csc -langversion:? Unterstützte Sprachversionen: default 1 2 ... 8.0 9.0 (default) latestmajor preview latest

Innerhalb von Visual Studio können wir über die Projekteigenschaften die Version des Ziel-Frameworks definieren und damit implizit die Version des C#-Compilers festlegen (Abb. 1). Für (erste) Experimente, zum Beispiel mit einer Konsolenapplikation, legen wir .NET 5.0 fest und aktivieren damit auch die Version C# 9.0.

krypczyk_csharp9_1.tif_fmt1.jpg Abb. 1: Einstellen der .NET-Ziel-Framework-Version und damit der Standardversion von C#

Ziel-Framework

Version

C#-Sprachversionsstandard

.NET

5.x

C# 9.0

.NET Core

3.x

C# 8.0

.NET Core

2.x

C# 7.3

.NET Standard

2.1

C# 8.0

.NET Standard

2.0

C# 7.3

.NET Standard

1.x

C# 7.3

.NET Framework

alle

C# 7.3

Tabelle 1: Zuordnung von .NET-Ziel-Framework und C#-Sprachversion [2]

Die Weiterentwicklung von C#

Die fortlaufende Entwicklung der Programmiersprache findet transparent und nachvollziehbar auf GitHub statt [3]. Es können von der Community Vorschläge für eine künftige Ausrichtung der Sprache eingereicht werden. Über deren Beachtung bzw. Eingang in die Sprache entscheidet das Sprachdesignteam. Über den Sinn und die Umsetzbarkeit eines möglichen künftigen Sprachmerkmals wird in Diskussionsforen befunden. Im Repository finden Sie zum Beispiel schon einen Ordner zur kommenden Version 10.0 von C# mit einem ersten Vorschlag, der erneut die Erweiterung des Musterabgleichs (Pattern Matching) betrifft. Wie reichhaltig C# bereits bezüglich seiner Funktionen ist, zeigt der Überblick der Versionen in Tabelle 2. Dabei muss man als Praktiker meist ehrlich zugestehen, dass man einige Funktionen aus früheren Versionen nicht regelmäßig oder sogar noch nie angewendet hat.

C#

Features und Erweiterungen

1.0

Klassen, Strukturen, Schnittstellen, Ereignisse, Eigenschaften, Delegaten, Operatoren und Ausdrücke, Anweisungen, Attribute

1.2

Verbesserungen und Aufruf von Dispose-IEnumerator-Typen

2.0

Generics, partielle Typen, anonyme Methoden, auf null festlegbare Werttypen, Iteratoren, Kovarianz und Kontravarianz

3.0

automatisch implementierte Eigenschaften, anonyme Typen, Query Expressions, Lambdaausdrücke, Ausdrucksbaumstrukturen, Erweiterungsmethoden, implizit typisierte lokale Variablen, partielle Methoden, Objekt- und Elementinitialisierer

4.0

dynamische Bindung, benannte und optionale Argumente, generische Kovarianz und Kontravarianz, eingebettete Interop-Typen

5.0

asynchrone Member (async und await), Attribute CallerInfo

6.0

statische Importe, Ausnahmefilter, Initialisierer für automatische Eigenschaften, Ausdruckskörper-Member, Nullpropagator, Zeichenfolgeninterpolation, nameOf-Operator, Indexinitialisierer

7.0

out-Variablen, Tupel und Dekonstruktionen, Mustervergleich, lokale Funktionen, erweiterte Ausdruckskörper-Member, lokale ref-Variablen und Rückgaben

7.1

async Main-Methode, default literale Ausdrücke, abgeleitete Tupelelementnamen, Musterabgleich für generische Typparameter

7.2

Techniken zum Schreiben von sicherem, effizientem Code; nicht schließende benannte Argumente; führende Unterstriche in numerischen Literalen; private protected-Zugriffsmodifizierer; bedingte ref-Ausdrücke

7.3

inkrementelle Verbesserungen vorhandener Funktionen, neue Compileroptionen

8.0

speziell auf .NET Core ausgerichtet, umfasst zum Beispiel: readonly-Member, Standardschnittstellenmethoden, Verbesserungen am Musterabgleich, using-Deklarationen, statische ...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang