iX 8/2017
S. 58
Review
Entwicklungsumgebung
Aufmacherbild

Neue Funktionen: C# 7.0 und Visual Basic .NET 15.0

Mehr Zucker

Die siebte Version von C# kennt eingebettete Funktionen und binäre Literale. Das Nutzen von Tupeln und Zeigern gestaltet sich einfacher, und einige bekannte Sprachkonstrukte funktionieren auch in weiteren Szenarien. Visual Basic .NET kann allerdings bei der rasanten Entwicklung nicht mehr mithalten.

C# 7.0 ist die zweite Version der Sprache, die auf der modularen Roslyn-Architektur basiert [1]. Der zugehörige Compiler wird im .NET Framework 4.7 nicht mitgeliefert, weder in den Laufzeitkomponenten noch im Developer Pack (zu .NET 4.7 siehe Kasten „Neues von .NET 4.7“). Wie bisher findet man hier zwar unter C:\Windows\Microsoft.NET\Framework64\v4.0.30319 einen C#-Compiler (csc.exe), dabei handelt es sich jedoch um ein altes Modell für C# 5.0, auch wenn er sich mit Version „4.7“ meldet (Abbildung 1).

Die in .NET 4.7 mitgelieferte Version des C#-Compilers ist eine alte Version für C# 5.0 (Abb. 1).

Installiert wird der Compiler durch Visual Studio 2017 [2], die Visual Studio Build Tools, .NET Core SDK 1.x oder die Vorschauversion von .NET Core SDK 2.0 (alle notwendigen Quellen findet man unter „Alle Links“ am Ende des Artikels). Als Nuget-Paket gibt es ihn ebenfalls, wobei die derzeitige Version 1.0.5 vom 08.06.2017 noch die Ausführung 2.1 des Compilers enthält, während Visual Studio und die Visual Studio Build Tools schon 2.2 mitliefern. Zum Nutzen der C#-7.0-Syntax reicht Version 2.0.

Die größte syntaktische Erweiterung betrifft Tupel, also „Listen endlich vieler, nicht notwendigerweise voneinander verschiedener Objekte“ (Wikipedia). Entwickler können sie seit .NET Framework 4.0 durch die generische .NET-Klasse System.Collections.Tupel einsetzen. Die Klasse unterstützt Tupel mit bis zu acht Elementen (Oktupel), aufzurufen über die Field-Attribute Item1, Item2 bis Item8:

Tuple<int, string, bool> dozent = ⤦
 new Tuple<int, string, bool>(1, ⤦
 "Holger Schwichtenberg", true); ⤦
 Console.WriteLine($"Dozent mit der ⤦
 ID{dozent.Item1}: {dozent.Item2} ⤦
 {( dozent.Item3 ? "ist ein ⤦
 .NET-Experte!": "")}");

Microsoft hat sich entschlossen, die Tupel direkt in der Syntax zu verankern. Ein Tupel deklariert der Entwickler mit runden Klammern bei der Zuweisung zu einer Variablen:

var dozent2 = ⤦
 (1, "Holger Schwichtenberg", true);

Die Datentypen der Elemente ergeben sich aus den zugewiesenen Werten. In diesem Fall heißen die Elemente weiterhin Item1, Item2 bis Item8. Es lassen sich jedoch in der Deklaration auch sprechende Namen verwenden: