Dela via


Attribut för lokala funktioner

Not

Den här artikeln är en funktionsspecifikation. Specifikationen fungerar som designdokument för funktionen. Den innehåller föreslagna specifikationsändringar, tillsammans med information som behövs under utformningen och utvecklingen av funktionen. Dessa artiklar publiceras tills de föreslagna specifikationsändringarna har slutförts och införlivats i den aktuella ECMA-specifikationen.

Det kan finnas vissa skillnader mellan funktionsspecifikationen och den slutförda implementeringen. Dessa skillnader fångas upp i de relevanta anteckningarna från språkutformningsmötet (Language Design Meeting) .

Du kan läsa mer om processen för att införa funktionsspecifikationer i C#-språkstandarden i artikeln om specifikationerna.

Attribut

Lokala funktionsdeklarationer tillåts nu ha attribut (§22). Parametrar och typparametrar för lokala funktioner kan också ha attribut.

Attribut med en angiven betydelse när de tillämpas på en metod, dess parametrar eller dess typparametrar har samma betydelse när de tillämpas på en lokal funktion, dess parametrar eller dess typparametrar.

En lokal funktion kan villkoras på samma sätt som en villkorsstyrd metod (§22.5.3) genom att dekorera den med en [ConditionalAttribute]. En villkorlig lokal funktion måste också vara static. Alla begränsningar för villkorsstyrda metoder gäller även för villkorsstyrda lokala funktioner, inklusive att returtypen måste vara void.

Extern

Den extern modifieraren tillåts nu för lokala funktioner. Detta gör den lokala funktionen extern i samma mening som en extern metod (§15.6.8).

På samma sätt som en extern metod måste local-function-body för en extern lokal funktion vara semikolon. Ett semikolon local-function-body tillåts endast för en extern lokal funktion.

En extern lokal funktion måste också vara static.

Syntax

Den §13.6.4, eller grammatiken för lokala funktioner ändras på följande sätt:

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
    | ';'
    ;