Delen via


Kenmerken van lokale functies

Notitie

Dit artikel is een functiespecificatie. De specificatie fungeert als het ontwerpdocument voor de functie. Het bevat voorgestelde specificatiewijzigingen, samen met informatie die nodig is tijdens het ontwerp en de ontwikkeling van de functie. Deze artikelen worden gepubliceerd totdat de voorgestelde specificaties zijn voltooid en opgenomen in de huidige ECMA-specificatie.

Er kunnen enkele verschillen zijn tussen de functiespecificatie en de voltooide implementatie. Deze verschillen worden vastgelegd in de relevante LDM-notities (Language Design Meeting) .

Meer informatie over het proces voor het aannemen van functiespeclets in de C#-taalstandaard vindt u in het artikel over de specificaties.

Kwestie met kampioen: https://github.com/dotnet/csharplang/issues/1888

Kenmerken

Declaraties van lokale functies mogen nu kenmerken hebben (§22). Parameters en typeparameters voor lokale functies mogen ook kenmerken hebben.

Kenmerken met een opgegeven betekenis wanneer ze worden toegepast op een methode, de bijbehorende parameters of de typeparameters, hebben dezelfde betekenis wanneer ze worden toegepast op een lokale functie, de bijbehorende parameters of de typeparameters.

Een lokale functie kan voorwaardelijk worden gemaakt in dezelfde zin als een voorwaardelijke methode (§22.5.3) door deze te decoreren met een [ConditionalAttribute]. Een voorwaardelijke lokale functie moet ook staticzijn. Alle beperkingen voor voorwaardelijke methoden zijn ook van toepassing op voorwaardelijke lokale functies, inclusief dat het retourtype moet worden void.

Extern

De extern modifier is nu toegestaan voor lokale functies. Dit maakt de lokale functie extern in dezelfde zin als een externe methode (§15.6.8).

Net als bij een externe methode moet de local-function-body van een externe lokale functie een puntkomma zijn. Een puntkomma local-function-body is alleen toegestaan voor een externe lokale functie.

Een externe lokale functie moet eveneens staticzijn.

Syntaxis

De §13.6.4, of grammatica van lokale functies, wordt als volgt gewijzigd:

local-function-header
    : attributes? local-function-modifiers? return-type identifier type-parameter-list?
        ( formal-parameter-list? ) type-parameter-constraints-clauses
    ;

local-function-modifiers
    : (async | unsafe | static | extern)*
    ;

local-function-body
    : block
    | arrow-expression-body
    | ';'
    ;