BLOG

Achtergronden

Wat kunnen we verwachten in C# 13?

20 juni 2024

Microsoft brengt jaarlijks een nieuwe .Net versie uit. Daarbij hoort ook een nieuwe versie van C#. De huidige versie is C# 12, maar op de Build conferentie werden er al een aantal tipjes van de sluier opgelicht om te tonen wat we van C# 13 kunnen verwachten. Laten we kijken wat Microsoft voor ons in petto heeft.

Params

Sinds de eerste versie van C# is het mogelijk om een argument van een methode te voorzien van het keyword params. Het type van het argument moet dan een array zijn. Hierdoor kun je niet slechts 1 waarde als argument mee geven, maar kommagescheiden zo veel waardes als je wilt (nul of meer, voor de volledigheid). In C# 13 is het ook mogelijk om andere collectie types te gebruiken. Bijvoorbeeld een List, IEnumerable of een Span.

Hierdoor is het niet nodig om een .ToArray() toe te voegen als je een bepaalde collectie wilt gebruiken bij de aanroep. Handig, maar de echte winst zit hem in het feit dat je de Span<T> en de ReadOnlySpan<T> kunt gebruiken omdat deze veel minder geheugen allocaties nodig hebben, vergeleken met Arrays. Een Span fungeert namelijk enkel als “doorkijkluikje” naar een deel van de onderliggende collectie. Microsoft heeft door deze nieuwe params functionaliteit de mogelijkheid gekregen om diverse .Net methodes aan te passen naar Spans zodat de performance van deze methodes verbeterd is. Bijvoorbeeld de StringBuilder.

Field

In C# 6 werden Auto Properties geïntroduceerd. Eenvoudig { get; set; } toevoegen en de compiler maakt op de achtergrond een backing field aan, dat toch al snel heel wat regels code bespaart als je meerdere properties op een Class hebt.

Het nadeel was dat je dit backing field niet kon bereiken. Dus als je iets in de getter of setter wilde toevoegen, dan moest je toch weer zelf een field aanmaken en de code uitschrijven.
In C# 13 krijgen we de beschikking over het keyword field. Je hoeft het backing field ook nu niet zelf aan te maken, maar je kunt het wel aanspreken. Bijvoorbeeld om een eenvoudige Trim() uit te voeren wanneer de naam van een student gezet wordt. 

Extension types

In C# 3 werd het mogelijk om Extension methods te schrijven. Door een static methode en het keyword this ontstaat er een nieuwe methode op een bepaald type. Hieronder wordt bijvoorbeeld de ParseAsJson toegevoegd aan string

In C# 13 kun je dit ook schrijven op onderstaande manier. JsonString is niet langer een class, maar een extension voor het type string. Bij de ParseAsJson methode hoef je dus niet meer aan te geven dat het van toepassing is op het type string. Het keyword this komt hiermee ook te vervallen. Veel logischer en cleaner dan de oude manier.

 

Deze methode hoeft nu ook niet meer als static aangemerkt te worden, wat eigenlijk al een beetje vreemd was, aangezien je the extension method alleen op een instantie van een object kon aanroepen.

Static extension methods

Tot zo ver alleen een andere schrijfwijze dus. Maar dit maakt wel de weg vrij om daadwerkelijk static extensions aan te maken. Het voorbeeld is hieronder uitgebreid met een static CreateIntented methode.

Aangezien dit een static methode is, kun je deze op het type string aanroepen en niet op een instantie van een string. Wanneer je nu de mogelijkheden van het type string bekijkt, zie je inderdaad de mogelijk CreateIntented verschijnen.

Extension properties

Extension methods zijn enorm bruikbaar om extra functionaliteit toe te voegen aan een type dat niet onderdeel is van je eigen broncode. Echter bestaat een type niet alleen uit methodes. In sommige gevallen zou je bijvoorbeeld ook properties willen toevoegen. Laten we naar een ander voorbeeld kijken.

Een Team bestaat uit verschillende personen. Eén van hen is de Lead, de overigen zijn Members. Om makkelijk te kunnen achterhalen of een persoon een Lead is, zou je een extension property kunnen toevoegen.

Deze property bestaat daarmee op een persoon object.

Implicit vs. Explicit

Waarschijnlijk is het je al opgevallen dat de extensions worden aangemerkt als implicit. Dat doet toch vermoeden dat er ook zoiets zal zijn als een explicit extension.

We hebben net gezien hoe de property IsLead toegevoegd kon worden op een persoon. Deze property is logischerwijs van toepassing op alle personen. Stel je wilt weten welke teams een Lead allemaal aanstuurt. Een property Teams zou dan wel handig zijn op personen die Lead zijn, maar het is niet logisch om die op alle personen toe te passen. Hieronder zie je een explicit extension voor Person met de naam Lead. 

Lead is nu feitelijk een nieuw afgeleid type geworden waar je een persoon naar kunt casten. Alleen personen die gecast zijn als Lead, zullen nu de property Teams bevatten.

Beschikbaarheid

Een aantal van bovenstaande mogelijkheden zijn nu beschikbaar in de preview versie van C# 13. Een aantal voorbeelden werken nu nog niet, maar zijn wel in ontwikkeling. In november 2024 komt de nieuwe versie van .Net en C# beschikbaar en dan zal blijken of het Microsoft gelukt is om alle bovenstaande features helemaal af te krijgen. Of misschien zelf nog wel meer? Dit ziet er in ieder geval al heel bruikbaar uit.

 

Meer informatie over Microsoft oplossingen, C# of .NET?

Neem dan contact op met Christian. Hij wil je er graag alles over vertellen.

 

Interesse in een gesprek?

neem contact op met Christian Peeters

Laat uw gegevens achter

We nemen contact met u op!



Zie onze privacyverklaring.