Last active
August 29, 2015 14:02
-
-
Save Fhernd/403f0f70086dd86a0c88 to your computer and use it in GitHub Desktop.
Demostración del seguimiento de los pasos para la implementación del patrón de eventos estándar de Microsoft .NET Framework en C#.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
namespace Articulos.Cap04 | |
{ | |
// Clase contenedora de los datos del evento de cambio de precio: | |
internal class PrecioCambioEventArgs : EventArgs | |
{ | |
public readonly decimal PrecioAnterior; | |
public readonly decimal PrecioNuevo; | |
public PrecioCambioEventArgs(decimal precioAnterior, decimal precioNuevo) | |
{ | |
PrecioAnterior = precioAnterior; | |
PrecioNuevo = precioNuevo; | |
} | |
} | |
// Clase que representa un producto (únicamente con su precio). | |
// Clase publicadora (broadcaster): | |
internal class Producto | |
{ | |
// Precio del producto: | |
decimal precio; | |
// Evento que dispara cuando hay un cambio de precio del producto: | |
public event EventHandler<PrecioCambioEventArgs> PrecioCambio; | |
protected virtual void OnPrecioCambio (PrecioCambioEventArgs e) | |
{ | |
if (PrecioCambio != null) | |
{ | |
PrecioCambio (this, e); | |
} | |
} | |
public decimal Precio | |
{ | |
get | |
{ | |
return precio; | |
} | |
set | |
{ | |
if (precio == value) | |
{ | |
return; | |
} | |
decimal precioViejo = precio; | |
precio = value; | |
// Se invoca cuando hay diferencai del precio anterior | |
// con un nuevo precio: | |
OnPrecioCambio (new PrecioCambioEventArgs (precioViejo, precio)); | |
} | |
} | |
} | |
internal class Aplicacion | |
{ | |
public static void Main() | |
{ | |
Producto producto = new Producto(); | |
// Asignamos un precio nuevo al producto: | |
producto.Precio = 27.10M; | |
// Register with the PrecioChange event: | |
producto.PrecioCambio += PrecioCambio; | |
producto.Precio = 31.59M; | |
} | |
// Método compatible con la firma del delegado genérico. | |
// Este método es invocado de forma indirecta cuando el | |
// evento de cambio de precio se genera: | |
public static void PrecioCambio(object sender, PrecioCambioEventArgs e) | |
{ | |
if ((e.PrecioNuevo - e.PrecioAnterior) / e.PrecioAnterior > 0.1M) | |
{ | |
Console.WriteLine("¡Alerta, el precio del producto ha incrementado un 10%!"); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment