![]() |
Hoje vou apresentar o novo recurso do C# 9.0 : Funções anônimas estáticas. |
O C# 9 trouxe uma importante melhoria para funções anônimas, permitindo o modificador estático nelas e agora temos funções anônimas estáticas!
Por que a Microsoft trouxe esse recurso?
Porque a alocação é importante!
A motivação é evitar capturar involuntariamente o estado do contexto delimitador, o que pode resultar em uma retenção inesperada de objetos capturados ou alocações adicionais inesperadas.
Assim, agora um método lambda ou anônimo pode ter um modificador static que indica que o método lambda ou anônimo é uma função anônima estática.
Assim uma função anônima estática :
Como exemplo abaixo temos um trecho de código onde a variável contextual _texto(variável de instância) é capturada pela função anônima e pode causar alocação não intencional:
private string _texto = "{0} é um belo país!";
public void PromoverPais(Func<string, string> func)
{
var paises = new List<string> { "Canada", "França", "Japão" };
foreach (var pais in paises)
Console.WriteLine(func(pais));
}
PromoverPais(pais => string.Format(this._texto, pais));
|
Para corrigir isso, você pode adicionar o modificador static na função lambda e usar o modificador const na variável que você não deseja que seja capturada, dessa forma, qualquer contexto delimitador será capturado lá:
const string _texto = "{0} é um belo país!"; public void PromoverPais(Func<string, string> func)
{
var paises = new List<string> { "Canada", "França", "Japão" };
foreach (var pais in paises)
Console.WriteLine(func(pais));
}
PromoverPais(static pais => string.Format(_texto, pais));
|
Concluindo temos que :
As regras de
acessibilidade para membros privados no escopo delimitador são as mesmas para
funções anônimas estáticas e não estáticas.
E estamos
conversados...
Não se turbe o
vosso coração; credes em Deus, crede também em mim.
Na casa de meu Pai há muitas moradas. Se assim não fora, eu vo-lo teria dito.
Pois vou preparar-vos lugar.
João 14:1,2
Referências:
ADO .NET - Acesso Assíncrono aos dados
C# - Programação Funcional - Exemplos
C# - Coleções Imutáveis
C# 9.0 - Apresentando Records
C# - Os 10 Erros mais comuns dos iniciantes
C# - Otimizando o código