Funções anônimas estáticas
Nota
Este artigo é uma especificação de recurso. A especificação serve como o documento de design para o recurso. Ele 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 discrepâ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/275
Resumo
Permitir um modificador "estático" em lambdas e métodos anônimos, o que impede a captura de variáveis locais ou estados de instância de conter escopos.
Motivação
Evite capturar estado de maneira não intencional do contexto delimitador, pois pode resultar na retenção inesperada de objetos capturados ou em alocações adicionais inesperadas.
Design detalhado
Um método lambda ou anônimo pode ter um modificador 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 delimitador.
Como resultado, locais, parâmetros e this
do escopo delimitador não estão disponíveis em uma função anônima estática.
Uma função anônima estática não pode referenciar membros de instância a partir de uma referência implícita ou explícita, seja this
ou base
.
Uma função anônima estática pode fazer referência a static
membros do escopo delimitador.
Uma função anônima estática pode fazer referência a constant
definições do escopo delimitador.
nameof()
em uma função anônima estática pode fazer referência a locais, parâmetros ou this
ou base
do escopo delimitador.
As regras de acessibilidade para membros private
no escopo delimitador são as mesmas para funções anônimas static
e não static
.
Nenhuma garantia é dada quanto à possibilidade de uma definição de função anônima estática ser emitida como um método static
no metadata. Isso é deixado para a implementação do compilador otimizar.
Uma função local que não sejastatic
ou uma função anônima pode capturar o estado de uma função anônima estática envolvente , mas não pode capturar o estado fora da função anônima estática envolvente .
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