Com o C# 7.0, agora também é possível a declaração de funções dentro de métodos convencionais. Do ponto de vista prático, este recurso batizado como Local Functions permitirá que se isolem métodos que teriam a princípio uma abrangência de uso bem restrita (normalmente invocados por uma única operação).
Na próxima listagem está um exemplo envolvendo a utilização de uma Local Function chamada ExibirHorarioAtual:
using System; using System.Threading; namespace ExemploLocalFunctions01 { class Program { static void Main(string[] args) { void ExibirHorarioAtual() { Console.WriteLine( quot;Horário atual: {DateTime.Now.ToString("HH:mm:ss")}"); } ExibirHorarioAtual(); Console.WriteLine("Aguarde alguns segundos..."); Random r = new Random(); Thread.Sleep(new Random().Next(3000, 6000)); ExibirHorarioAtual(); Console.ReadKey(); } } }
A imagem a seguir traz o resultado da execução desta sequência de instruções:
A listagem seguinte apresenta um segundo exemplo de uso de uma Local Function, com o método Inverter revertendo a ordem dos caracteres que compõem uma string:
using System; using System.Linq; namespace ExemploLocalFunctions02 { class Program { static void Main(string[] args) { string Inverter(string valor) { return new string( valor.ToCharArray().Reverse().ToArray()); } string texto; texto = "Utilizando o C# 7.0"; Console.WriteLine(quot;{texto} -> {Inverter(texto)}"); texto = "Local Function"; Console.WriteLine(quot;{texto} -> {Inverter(texto)}"); Console.ReadKey(); } } }
O resultado da execução deste bloco de código está na próxima imagem:
A função Inverter também poderia ser declarada empregando uma expressão lambda, representando assim um exemplo de Expression-bodied Function. É o que demonstra a listagem a seguir:
using System; using System.Linq; namespace ExemploLocalFunctions02 { class Program { static void Main(string[] args) { string Inverter(string valor) => new string(valor.ToCharArray().Reverse().ToArray()); string texto; texto = "Utilizando o C# 7.0"; Console.WriteLine(quot;{texto} -> {Inverter(texto)}"); texto = "Local Function"; Console.WriteLine(quot;{texto} -> {Inverter(texto)}"); Console.ReadKey(); } } }
Referências
- New Features in C# 7.0: https://blogs.msdn.microsoft.com/dotnet/2017/03/09/new-features-in-c-7-0/