Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace Articulos.Cap04
- {
- internal class Contador
- {
- // Usamos el delegado incorporado en .NET para
- // crear el evento de límite alcanzado:
- public event EventHandler LimiteAlcanzadoEventHandler;
- private int limite;
- private int conteo;
- public Contador(int limite)
- {
- this.limite = limite;
- }
- public void Contar(int x)
- {
- conteo += x;
- if (conteo >= limite)
- {
- OnLimiteAlcanzado (EventArgs.Empty);
- }
- }
- protected virtual void OnLimiteAlcanzado(EventArgs e)
- {
- // La creación de esta variable temporal nos servirá
- // para asegurar colisiones en un ámbiente multihilo:
- EventHandler tempEventHandler = LimiteAlcanzadoEventHandler;
- // Probamos que en la pila de métodos asociados (listeners)
- // haya por lo menos uno:
- if ( tempEventHandler != null)
- {
- tempEventHandler (this, e);
- }
- }
- }
- internal class Aplicacion
- {
- public static void Main()
- {
- Console.WriteLine();
- // Creamos una instancia de `Contador` y le pasamos
- // un número aleatorio como argumento (límite):
- Contador c = new Contador (new Random().Next(10));
- // Establecemos método de escucha:
- c.LimiteAlcanzadoEventHandler += LimiteAlcanzado;
- // Se repite siempre y cuando pulsemos la tecla 'a':
- while (Console.ReadKey(true).KeyChar == 'a')
- {
- Console.WriteLine("Incremento en 1");
- c.Contar (1);
- }
- }
- public static void LimiteAlcanzado(object sender, EventArgs e)
- {
- Console.WriteLine( "El límite ha sido alcanzado.\n");
- Environment.Exit(0);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement