BASTA!-Interview mit Christian Nagel

C# 8 – die neuen Features im Überblick
1 Kommentar

Mit dem Release von .NET Core 3.0 ist auch die Programmiersprache C# offiziell in Version 8 verfügbar. Christian Nagel klärt uns im BASTA!-Interview darüber auf, welche neuen Features enthalten sind und wie man damit produktiv arbeiten kann.

Das ist neu in C# 8

Entwickler: Hallo Christian! Du hast in deinem BASTA!-Talk die Neuerungen in C#8 vorgestellt. Was sind aus deiner Sicht die Highlights der neuen Version?

Christian Nagel: Mit C# 8 gibt es zahlreiche Änderungen, die die Produktivität verbessern können. Ein Highlight sind dabei sicher die Non-nullable reference types. Tony Hoare hat Null References bei der Programmiersprache ALGOL im Jahr 1965 eingeführt – und das später als „Billion Dollar Mistake“ bezeichnet. Praktisch alle anderen Programmiersprachen haben das nachgemacht.

Wir können erwarten, dass NullableReference Exceptions mit C# 8 weniger werden.

Auch bei .NET sind die am häufigsten auftretenden Exceptions vom Typ NullableReferenceException. Diese Fehler sollen jetzt mit Non-nullable reference types vermieden werden. Ein paar Probleme gibt es bei der Umstellung schon noch, aber wir können erwarten, dass diese Exceptions mit C# 8 tatsächlich weniger werden. Async streams, ranges und indices sowie Erweiterungen beim pattern matching sind weitere Highlights.

Entwickler: Kannst du einmal anhand eines Beispiels zeigen, was damit möglich ist?

Christian Nagel: Ich möchte da einmal die neue C# 8 switch expression zeigen – und das in Kombination mit dem C# 7 Tuple.

public (LightState Current, LightState Previous) GetNextLight(LightState currentLight, LightState previousLight)

  => (currentLight, previousLight) switch

  {

                (LightState.FlashingYellow, _) => (LightState.Red, currentLight),

                           (LightState.Red, _) => (LightState.Yellow, currentLight),

           (LightState.Yellow, LightState.Red) => (LightState.Green, currentLight),

                         (LightState.Green, _) => (LightState.FlashingGreen, currentLight),

                 (LightState.FlashingGreen, _) => (LightState.Yellow, currentLight),

    (LightState.Yellow, LightState.GreenBlink) => (LightState.Red, currentLight),

                                             _ => (LightState.FlashingYellow, currentLight)

  };

Die Methode GetNextLight (aus meinem Blog) zeigt das Beispiel einer Ampel und liefert den nächsten Ampelzustand. Als Parameter gibt es den aktuellen und vorherigen Lichtzustand, von der Methode wird in einem Tuple der neue Zustand geliefert.

Der Code erfordert Gewöhnung an Tuples und Lambda Expressions. An Lambda Expressions konnten wir uns ja schon viele Jahre gewöhnen, an Tuples, die in der Sprache integriert sind, erst seit C# 7. Damit wird dann der neue Code im Vergleich zum alten switch statement leichter lesbar.

In jeweils einer einzigen Code-Zeile ist erkennbar, aus welchem existierenden Zustand welcher neue Zustand wird. Das alte Switch Statement war nicht so übersichtlich und erforderte einiges mehr an Code-Zeilen.

Für eine Konvertierung des alten switch statements zur neuen switch expression gibt es auch Visual-Studio-Unterstützung. Das geht aber natürlich nicht in allen Szenarien. Es gibt schon noch Situationen, bei denen das switch statement benötigt und wichtig ist. Wenn ein Ergebnis zurückgeliefert werden muss, ist die switch expression eine optimale Alternative.

C# 8 in Frameworks

Entewickler: Wie kommen die Neuerungen aus C# 8 in Frameworks zum Tragen?

Christian Nagel: Bei C# 7 wurde der Type Span<T> mit Erweiterungen der Reference Semantiks ermöglicht. Span<T> erlaubt direkten Memory-Zugriff auf Memory-Bereiche, ohne Daten kopieren zu müssen. Aufgrund diesen neuen Typs gibt es in vielen .NET-Klassen Erweiterungen, neue Overloads, sowie auch neue Implementierungen bestehender Klassen.

Zum Beispiel wurden viele Methoden des Typs String, der ja in jeder Applikation verwendet wird, schneller und benötigen jetzt weniger Memory. Mit C# 8 gibt es jetzt Spracherweiterungen mit ranges und indices, um einfacher auf Teile eines Memory-Bereiches zugreifen zu können.

Nullability bewirkt auch Neuerungen in Frameworks. Soll z.B. die Methode Object.ToString() „null“ zurückliefern können oder nicht? Diese Entscheidung galt es zu treffen und zu implementieren. Jetzt ist der Code gleichzeitig die Dokumentation. Der Compiler hilft mit Warnungen, wenn die Methode falsch verwendet wird.

Ein anderes Beispiel ist die Implementierung von Streams mit SignalR. Mit Hilfe der neuen Implementierung von C# 8 Async Streams ist der Code, den man schreiben muss, um Streams von SignalR zurückzuliefern oder im Client zu verwenden, so viel einfacher geworden.

Entwickler: Was fehlt dir persönlich noch in C#? Welche Neuerungen würdest du dir für die nächste Version wünschen?

Christian Nagel: Mit nullable reference types gibt es schon noch ein paar Probleme, bei der eine bessere Unterstützung in der Programmiersprache helfen könnte. Daran wird auch gearbeitet. Ein weiteres Feature, das ich mir wünsche – und da geht es jetzt auch in der nächsten C#-Version weiter – sind records. Damit lassen sich immutable Typen mit einigen Default-Implementierungen in nur wenigen Code-Zeilen erzeugen.

BASTA! Spring 2020

Dr. Holger Schwichtenberg

Von .NET Framework zu .NET Core migrieren oder nicht migrieren, das ist hier (nicht die einzige) Frage!

mit Dr. Holger Schwichtenberg (www.IT-Visions.de/5Minds IT-Solutions)

Rainer Stropek

C#-8- und .NET-Core-3-Workshop

mit Rainer Stropek (software architects/www.IT-Visions.de)

Adrienne Tacke

Azure Automation: The Good Parts

mit Adrienne Tacke (Adrienne Tacke)

Auf dem Weg zu .NET 5

Ich sehe .NET 5 vor allem als Namensänderung für .NET Core.

Entwickler: Eine große Änderung hat Microsoft ja in Bezug auf .NET angekündigt: .NET Framework, .NET Core und Mono sollen künftig in.NET 5.0 aufgehen. Was bedeutet das konkret für Anwendungsentwickler?

Christian Nagel: Ich sehe .NET 5 vor allem als Namensänderung für .NET Core. Es soll Entwickler, die jetzt noch mit dem .NET Framework arbeiten müssen, darauf hinweisen, wie es weitergeht. Mit .NET Core 3.0 sind bereits viele Hindernisse zum Umstieg ausgeräumt.

.NET Core 3.0 erlaubt z.B. auch die Entwicklung von WPF und Windows Forms Applikationen. Für viele bestehende Applikationen reicht da praktisch die Änderung des Projektfiles. Auf jeden Fall ergibt es jetzt schon Sinn, bestehende Applikationen auf API Portability zu testen, um zu sehen, wie einfach oder schwer der Umstieg ist.

COM Interop ist z.B. für einen leichteren Umstieg schon in .NET Core eingebaut. Mit .NET 5 werden sicher noch weitere Hindernisse ausgeräumt. Bei einigen .NET-Framework-Technologien sollte man aber schon überlegen, auf neue Frameworks und Architekturen umzustellen – z.B. kann Blazor mit .NET Core 3.0 eine Alternative zu WebForms bieten. Applikationen, die WCF verwenden, können je nach Anwendungsfall auf Web API, gRPC, oder SignalR umgestellt werden.

Entwickler: Was ist die Kernbotschaft deines Talks, die jeder Teilnehmer mit nach Hause nehmen sollte?

Christian Nagel: C# wandelt sich entsprechend der Bedürfnisse, die an Applikationen gestellt werden. Wenn wir uns die Applikations-Landschaft ansehen, die es bei C# 1.0 gegeben hat, und das mit heute vergleichen, sieht es doch ganz anders aus. C# wandelt sich dementsprechend, um auch in der neuen Applikations-Landschaft effizient entwickeln zu können.

C# bringt laufend neue Features, die es auch mit diesen Applikations-Änderungen erlauben, schneller Code zu schreiben, und bringt Erweiterungen, die direkt oder indirekt von allen C#-Entwicklern genutzt werden können.

Entwickler: Vielen Dank für dieses Interview!

Christian Nagel ist Buchautor, Microsoft MVP für Visual Studio, Gründer von CN innovation, Softwarearchitekt und -entwickler mit Microsoft-.NET-Technologien. Er arbeitet seit mehr als 25 Jahren als Softwareentwickler auf unterschiedlichsten Plattformen und mit unterschiedlichen Technologien und Sprachen, startete mit PDP 11 und VAX/VMS-Systemen. Seit dem Jahr 2000 arbeitet er an verteilten .NET-Lösungen, wozu er sein Wissen auch in zahlreichen Büchern vermittelt, u. a. im neuesten Buch Professional C# 7 and .NET Core 2. Seine Schwerpunkte sind heute ASP.NET Core, Web-API, EF Core, Microsoft Azure, Universal Windows Apps und Xamarin.
Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

1 Kommentar auf "C# 8 – die neuen Features im Überblick"

avatar
400
  Subscribe  
Benachrichtige mich zu:
Martin
Gast

Es sollten im Text wohl NullReferenceExceptions gemeint sein weil es NullableReferenceExceptions in C# nicht gibt.

X
- Gib Deinen Standort ein -
- or -