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
| ';'
;
C# feature specifications