Funções anónimas estáticas
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/275
Resumo
Permitir um modificador 'estático' em lambdas e métodos anónimos, que impede a captura de variáveis locais ou estado de instância das extensões envolventes.
Motivação
Evite capturar involuntariamente o estado do contexto envolvente, o que pode resultar em retenção inesperada de objetos capturados ou alocações adicionais inesperadas.
Projeto detalhado
Um método lambda ou anônimo pode ter um modificador de static
. O modificador static
indica que o método lambda ou anônimo é uma função anônima estática .
Uma função anônima estática não pode capturar o estado do escopo que o encerra.
Como resultado, locais, parâmetros e this
do escopo que encerra não estão disponíveis numa função estática anônima .
Uma função estática anônima não pode fazer referência a membros da instância a partir de uma referência this
implícita ou explícita ou base
.
Uma função anónima estática pode fazer referência a static
membros do escopo envolvente.
Uma função anónima estática pode fazer referência a definições de constant
a partir do âmbito de aplicação.
nameof()
em uma função anônima estática pode fazer referência a locais, parâmetros ou this
ou base
a partir do escopo de encerramento.
As regras de acessibilidade para membros private
no âmbito envolvente são as mesmas para funções anônimas static
e para funções não anônimasstatic
.
Não é dada qualquer garantia sobre se uma função anónima estática definição é emitida como um método static
em metadados. Isso é deixado para a implementação do compilador para otimizar.
Uma função local nãostatic
ou uma função anónima pode capturar o estado de uma função anónima estática mas não pode capturar o estado fora da função anónima de inclusão estática.
Remover o modificador de static
de uma função anônima em um programa válido não altera o significado do programa.
C# feature specifications