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