Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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%!");
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement