Een kijkje in de nieuwste C# 11-functies die in november verschijnen met .NET 7 — Visual Studio Magazine

Nieuws

Een kijkje in de nieuwste C# 11-functies die in november verschijnen met .NET 7

Begin november met .NET 7 komen er veel nieuwe functies in C# 11, de nieuwste versie van Microsoft’s vlaggenschip programmeertaal.

Gisteren, bij het benadrukken van nieuwe functies voor C# 11 die bij de recente release van Visual Studio 2022 v17.3 kwamen, concentreerde Microsoft zich op generieke wiskunde, samen met verbeteringen aan objectinitialisatie via vereiste leden en ref velden.

Andere nieuwe functies, waaronder onbewerkte letterlijke tekenreeksen, generieke attributen en meer, werden uitgerold met VS 2022 v17.1 en VS 2022 v17.2.

C# 11 Werken op GitHub
[Click on image for larger view.] C# 11 Werken op GitHub (bron: Microsoft).

“We hebben de neiging als we kunnen, we hebben de neiging om enkele van de grotere functies te nemen en ze uit te druppelen over meerdere releases om ervoor te zorgen dat we eerst de scenario’s met hoge impact krijgen, dat we onderweg feedback krijgen, enzovoort”, legt Microsoft uit. Mads Torgersen in een video die eerder deze maand werd gepubliceerd met de titel ‘C# 11: The Highlights’.

Algemene wiskunde
Met de v17.3-release druipt er generieke wiskunde uit, die wordt ondersteund door deze taalfuncties:

  • static virtual leden in interfaces
  • gecontroleerde door de gebruiker gedefinieerde operators
  • ontspannen ploegendiensten
  • niet-ondertekende rechtsploegmedewerker

Generieke wiskunde gebruikt een nieuwe functie genaamd statische virtuals in interfaces waarmee .NET-ontwikkelaars gebruik kunnen maken van statische API’s van generieke code. Door bijvoorbeeld operators op generieke typen te gebruiken, kunnen ontwikkelaars de invoer beperken tot getalachtige typen, waardoor ze niet langer veel vergelijkbare implementaties hoeven te schrijven of onderhouden om meerdere typen te ondersteunen. Een ander voorbeeld: ontwikkelaars krijgen toegang tot al hun favoriete operators en kunnen ze gebruiken vanuit generieke contexten.

“Met deze functie kunnen interfaces operators of andere statische methoden declareren”, zei Bill Wagner van Microsoft in een verklaring van augustus. 22 blogberichten. “Klassen die een interface implementeren, moeten zorgen voor de implementatie van: static abstract methoden, net als andere methoden die in interfaces zijn gedeclareerd. De compiler lost oproepen op naar: static methoden, inclusief operators, tijdens het compileren. Er is geen runtime-verzendmechanisme zoals bij instantiemethoden. De documenten bieden meer details over de specifieke taalregels die nodig zijn om deze functie te laten werken.”

Wagner merkte ook op: “Je gebruikt deze functies alleen rechtstreeks in geavanceerde scenario’s, zoals het schrijven van wiskundige algoritmen die op meerdere nummertypen werken.”

Dat is precies wat Torgersen deed in zijn videodemo met een ‘numeriek algoritme’. Hij zei: “We hebben behoorlijke numerieke ondersteuning, maar als het gaat om abstractie over iets numerieks, is dat altijd een beetje een probleem geweest.” Bij het doornemen van zijn codedemo merkte hij op dat “het punt hier is om een ​​numeriek algoritme te hebben en dan na te denken over hoe het eruit zou zien als ik dit numerieke algoritme zou nemen en het zou abstraheren om toepasbaar te zijn op meer soorten getallen in plaats van om mijn code te kopiëren/plakken voor verschillende soorten numerieke typen en zo, zoals je vandaag moet doen.”

Verbeteringen voor objectinitialisatie
Een grote verbetering komt hier via vereiste leden, waarmee ontwikkelaars klasse- en structtypen kunnen schrijven waarvoor bellers bepaalde eigenschappen moeten instellen. Coders kunnen een . toevoegen required wijzig eigenschappen en velden om ervoor te zorgen dat die waarden worden geïnitialiseerd in constructors en aanroepen.

“Thee required edit geeft aan dat de veld goud eigendom waarop het wordt toegepast, moet worden geïnitialiseerd door alle constructeurs of met behulp van een objectinitialisator”, zegt Microsoft-documentatie. “Elke expressie die een nieuwe instantie van het type initialiseert, moet alle vereiste leden initialiseren.”

Torgersen legde de functie uit in een demoscenario van het coderen van een persoonsklasse, waarbij hij de oude methode liet vallen die meerdere constructors met verschillende parameters vereiste om te bepalen hoe een persoonsklasse kon worden geconstrueerd, in plaats van één standaardconstructor te gebruiken en vervolgens objectinitializers te gebruiken om te creëren nieuwe objecten.

“In veel opzichten is dit een geweldige ervaring, zowel voor het onderhouden van de klassenhiërarchieën als voor de eindgebruiker ervan, maar er is één ding dat constructeurs niet kunnen doen, en dat is dat ik er geen waarden voor kan geven eigenschappen, “zei Torgersen. “Het is altijd optioneel. Alles is optioneel, en dat is een probleem omdat je de voornaam en de achternaam niet wilt laten met een standaardwaarde die null is, wat eigenlijk ingaat tegen de niet-nullable typen. Dat is eigenlijk wat deze waarschuwing gaat over. Het is als, ‘hey, je laat null daar achter. Je constructeurs initialiseren dit niet.’ ”

In de demo, door verschillende dingen uit te proberen, liet Torgersen zien hoe iemands LastName eigenschap kan uiteindelijk nul zijn als de ontwikkelaar vergeet een waarde op te geven. “Wat we echt willen, is kunnen zeggen: ‘Ik beloof dat ik de beller van de constructor deze eigenschap zal laten initialiseren.’ Het is vereist, en dat is wat we hier in C# 11 toevoegen. We zeggen dat vereiste eigenschappen iets zijn. Door te zeggen dat het vereist is, sluiten we de waarschuwing op dat het nog steeds nul kan zijn. De compiler vertrouwt erop dat de beller zal het geven, en inderdaad, het zal ze maken door je een fout te geven totdat je het doet.”

Wagner gebruikte ook een persoonsklasse als voorbeeld om de vereiste leden in zijn post deze week uit te leggen. “Bellers moeten objectinitialisatoren gebruiken om de waarden van de . in te stellen FirstName en LastName eigendom. Maar vóór 17.3 kan de compiler niet afdwingen dat aanroepers die eigenschappen moeten instellen. Een constructor die parameters vereist, is de enige manier om ervoor te zorgen dat de gebruiker de FirstName en LastName eigendommen. Vereiste leden communiceren met de compiler en bellers dat ze die eigenschappen moeten instellen.”

Alle functies tot nu toe
Hier is de lijst met nieuwe C# 11-functies die zijn geïntroduceerd met de laatste kleine versie-releases van Visual Studio 2022:

  • Visual Studio 2022 17.3:

  • Visual Studio 2022 v17.2:

  • Visual Studio 2022 versie 17.1:

Om de nieuwe functies uit te proberen, moeten ontwikkelaars eraan denken om preview-functies in Visual Studio-projecten in te schakelen.

“Deze preview van Visual Studio brengt ons dichter bij de volledige functieset voor C# 11”, zei Wagner. “We zijn in deze release blijven investeren in meerdere thema’s. We hebben gaandeweg correcties aangebracht op basis van de feedback die je ons al hebt gegeven. Dit is een goed moment om de preview te downloaden, alle nieuwe functies uit te proberen en geef ons feedback. We luisteren en maken de laatste updates voor C# 11 en .NET 7.”

Over de auteur

David Ramel is redacteur en schrijver voor Converge360.

.

Leave a Reply

Your email address will not be published.