Advertisement
Fhernd

Eventos.cs

Jul 30th, 2014
355
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.55 KB | None | 0 0
  1. using System;
  2.  
  3. namespace Articulos.Cap04
  4. {
  5.     // Clase contenedora de los datos del evento de cambio de precio:
  6.     internal class PrecioCambioEventArgs : EventArgs
  7.     {
  8.         public readonly decimal PrecioAnterior;
  9.         public readonly decimal PrecioNuevo;
  10.        
  11.         public PrecioCambioEventArgs(decimal precioAnterior, decimal precioNuevo)
  12.         {
  13.             PrecioAnterior = precioAnterior;
  14.             PrecioNuevo = precioNuevo;
  15.         }
  16.     }
  17.    
  18.     // Clase que representa un producto (únicamente con su precio).
  19.     // Clase publicadora (broadcaster):
  20.     internal class Producto
  21.     {
  22.         // Precio del producto:
  23.         decimal precio;
  24.        
  25.         // Evento que dispara cuando hay un cambio de precio del producto:
  26.         public event EventHandler<PrecioCambioEventArgs> PrecioCambio;
  27.        
  28.         protected virtual void OnPrecioCambio (PrecioCambioEventArgs e)
  29.         {
  30.             if (PrecioCambio != null)
  31.             {
  32.                 PrecioCambio (this, e);
  33.             }
  34.         }
  35.        
  36.         public decimal Precio
  37.         {
  38.             get
  39.             {
  40.                 return precio;
  41.             }
  42.             set
  43.             {
  44.                 if (precio == value)
  45.                 {
  46.                     return;
  47.                 }
  48.                
  49.                 decimal precioViejo = precio;
  50.                 precio = value;
  51.                
  52.                 // Se invoca cuando hay diferencai del precio anterior
  53.                 // con un nuevo precio:
  54.                 OnPrecioCambio (new PrecioCambioEventArgs (precioViejo, precio));
  55.             }
  56.         }
  57.     }
  58.    
  59.     internal class Aplicacion
  60.     {
  61.         public static void Main()
  62.         {
  63.             Producto producto = new Producto();
  64.            
  65.             // Asignamos un precio nuevo al producto:
  66.             producto.Precio = 27.10M;
  67.            
  68.             // Register with the PrecioChange event:
  69.             producto.PrecioCambio += PrecioCambio;
  70.             producto.Precio = 31.59M;
  71.         }
  72.        
  73.         // Método compatible con la firma del delegado genérico.
  74.         // Este método es invocado de forma indirecta cuando el
  75.         // evento de cambio de precio se genera:
  76.         public static void PrecioCambio(object sender, PrecioCambioEventArgs e)
  77.         {
  78.             if ((e.PrecioNuevo - e.PrecioAnterior) / e.PrecioAnterior > 0.1M)
  79.             {
  80.                 Console.WriteLine("¡Alerta, el precio del producto ha incrementado un 10%!");
  81.             }
  82.         }
  83.     }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement