Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. using System;
  2.  
  3. namespace Articulos.Cap04
  4. {
  5.     public sealed class VariableCapturadExpresionLambda
  6.     {
  7.         public static Func<int> IncrementarContadorLocal()
  8.         {
  9.             int contador = 0;
  10.            
  11.             // Retorna una expresión lambda que será asignada
  12.             // a un delegado de naturaleza `Func<TResult>`:
  13.             return () => contador++;
  14.         }
  15.    
  16.         public static void Main()
  17.         {
  18.             // Creamos un delegado de tipo `Func<TResult>`:
  19.             Func<int> delegadoIncremento;
  20.            
  21.             // Invocamos a `IncrementarContadorLocal` una
  22.             // sola vez para obtener la referencia a una expresión lambda:
  23.             delegadoIncremento = IncrementarContadorLocal();
  24.            
  25.             // Mostremos en pantalla la invocación indirecta de la
  26.             // expresión lambda retornada por `IncrementarContadorLocal`
  27.             // y encapsulada en en la instancia `delegadoIncremento`:
  28.             Console.WriteLine (delegadoIncremento());
  29.             Console.WriteLine (delegadoIncremento());
  30.             Console.WriteLine (delegadoIncremento());
  31.         }
  32.     }
  33. }