Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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