Partilhar via


Atributos nas funções locais

Observação

Este artigo é uma especificação de recurso. A especificação serve como o documento de design para o recurso. Ele inclui mudanças de especificação propostas, juntamente com as informações necessárias durante o design e desenvolvimento do recurso. Estes artigos são publicados até que as alterações de especificações propostas sejam finalizadas e incorporadas na especificação ECMA atual.

Pode haver algumas discrepâncias entre a especificação do recurso e a implementação concluída. Essas diferenças são capturadas nas notas pertinentes da Language Design Meeting (LDM).

Você pode saber mais sobre o processo de adoção de especificações de recursos no padrão de linguagem C# no artigo sobre as especificações .

Questão campeã: https://github.com/dotnet/csharplang/issues/1888

Atributos

As declarações de função local podem agora ter atributos (§22). Parâmetros e parâmetros de tipo em funções locais também podem ter atributos.

Atributos com um significado especificado quando aplicados a um método, seus parâmetros ou seus parâmetros de tipo terão o mesmo significado quando aplicados a uma função local, seus parâmetros ou seus parâmetros de tipo, respectivamente.

Uma função local pode ser condicionada no mesmo sentido que um método condicional (§22.5.3) decorando-a com um [ConditionalAttribute]. Uma função local condicional também deve ser static. Todas as restrições sobre métodos condicionais também se aplicam a funções locais condicionais, incluindo que o tipo de retorno deve ser void.

Externo

O modificador extern agora é permitido em funções locais. Isto torna a função local externa no mesmo sentido que um método externo (§15.6.8).

Da mesma forma que um método externo, o local-function-body de uma função local externa deve ser um ponto-e-vírgula. Um corpo de função local com ponto-e-vírgula só é permitido numa função local externa.

Uma função local externa também deve ser static.

Sintaxe

O §13.6.4, ou a gramática de funções locais é modificada da seguinte forma:

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