Compartilhar via


Atributos em funções locais

Observação

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

Pode haver algumas divergências entre a especificação do recurso e a implementação concluída. Essas diferenças são capturadas nas notas pertinentes da reunião de design de idioma (LDM).

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

Problema do especialista: https://github.com/dotnet/csharplang/issues/1888

Atributos

As declarações de função local agora têm permissão para ter atributos (§22). Os parâmetros e os parâmetros de tipo em funções locais também têm permissão para ter atributos.

Os 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 condicional no mesmo sentido do 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 em métodos condicionais também se aplicam a funções locais condicionais, incluindo que o tipo de retorno deve ser void.

Extern

O modificador de extern agora é permitido em funções locais. Isso 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 local-function-body com ponto-e-vírgula só é permitido em uma 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 maneira:

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