fork(1) download
  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. }
Success #stdin #stdout 0.03s 33864KB
stdin
Standard input is empty
stdout
0
1
2