Eventos: publicación/suscripción y palabra clave event
Use eventos para publicar y suscribirse: declare un evento, agregue y quite handlers, transmita datos mediante EventArgs y láncelo con el patrón OnX.
Eventos: publicación/suscripción y palabra clave event es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 2 de 3. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 3 lecciones en total.
Descripción general de los eventos
Objetivo: Publicar y suscribirse mediante eventos.
- Declare un event en el publicador
- Suscríbase con += y cancele la suscripción con -=
- Desencadene el evento de forma segura en el publicador
- Pase datos mediante EventArgs
Uso básico de eventos
Exponga un event y permita que los suscriptores se asocien y se desvinculen. Solo el publicador lo invoca.
using System;
public class Button
{
public event EventHandler Click;
public void SimulateClick()
{
// Safe raise: copy then invoke if not null (C# 6-safe)
EventHandler h = Click;
if (h != null) h(this, EventArgs.Empty);
}
}
public class Program
{
static void OnClick(object sender, EventArgs e)
{
Console.WriteLine("Clicked!");
}
public static void Main(string[] args)
{
Button b = new Button();
b.Click += OnClick; // subscribe
b.SimulateClick(); // prints "Clicked!"
b.Click -= OnClick; // unsubscribe
b.SimulateClick(); // no output
}
}
Evento con datos
Use EventArgs (o EventHandler<TEventArgs>) para pasar datos útiles a los suscriptores.
using System;
// Data for the event
public sealed class PriceChangedEventArgs : EventArgs
{
public decimal OldPrice { get; private set; }
public decimal NewPrice { get; private set; }
public PriceChangedEventArgs(decimal oldP, decimal newP)
{
OldPrice = oldP; NewPrice = newP;
}
}
public sealed class Product
{
private decimal _price;
public event EventHandler<PriceChangedEventArgs> PriceChanged;
public decimal Price
{
get { return _price; }
set
{
if (value != _price)
{
decimal old = _price;
_price = value;
EventHandler<PriceChangedEventArgs> h = PriceChanged;
if (h != null) h(this, new PriceChangedEventArgs(old, _price));
}
}
}
}
public class Program
{
public static void Main(string[] args)
{
Product p = new Product();
p.PriceChanged += delegate(object s, PriceChangedEventArgs e)
{
Console.WriteLine("Price: " + e.OldPrice + " -> " + e.NewPrice);
};
p.Price = 10m;
p.Price = 12m;
}
}
Multidifusión y lambdas
Los eventos admiten multidifusión: varios manejadores se ejecutan en el orden de suscripción. Use manejadores con nombre o anónimos.
using System;
public class Alarm
{
public event EventHandler Ring;
public void Trigger()
{
EventHandler h = Ring;
if (h != null) h(this, EventArgs.Empty);
}
}
public class Program
{
static void HandlerA(object s, EventArgs e) { Console.WriteLine("A"); }
static void HandlerB(object s, EventArgs e) { Console.WriteLine("B"); }
public static void Main(string[] args)
{
Alarm a = new Alarm();
a.Ring += HandlerA; // named
a.Ring += delegate(object s, EventArgs e) { Console.WriteLine("lambda"); }; // anon
a.Ring += HandlerB;
a.Trigger(); // prints A, lambda, B (multicast order)
}
}
Patrón de desencadenamiento OnX
Use un método OnX protegido para desencadenar eventos. Copie el delegado en una variable local y compruebe si es null antes de invocarlo.
using System;
public class Ticker
{
public event EventHandler Tick;
protected virtual void OnTick()
{
EventHandler h = Tick; // copy to local
if (h != null) h(this, EventArgs.Empty);
}
public void RunOnce()
{
// do work...
OnTick(); // raise via protected method
}
}
public class Program
{
static void Show(object s, EventArgs e) { Console.WriteLine("Tick!"); }
public static void Main(string[] args)
{
Ticker t = new Ticker();
t.Tick += Show;
t.RunOnce();
}
}
Consejos y errores frecuentes con eventos
Consejos:
- Cancele siempre la suscripción ( -= ) cuando ya no necesite un suscriptor.
- Mantenga los manejadores breves; el trabajo prolongado debe ponerse en cola.
- Use EventArgs (o una subclase) para pasar datos.
- Solo el publicador debe desencadenar el evento.
Función de la palabra clave event
Repaso
Repaso: Declare un event, permita que los suscriptores se asocien y se desvinculen, pase datos con EventArgs y desencadene el evento mediante un método OnX protegido.
Preguntas frecuentes
¿La lección «Eventos: publicación/suscripción y palabra clave event» es gratis?
Sí — el texto completo de «Eventos: publicación/suscripción y palabra clave event» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 3 lecciones en total.
¿Qué aprenderé en «Eventos: publicación/suscripción y palabra clave event»?
Use eventos para publicar y suscribirse: declare un evento, agregue y quite handlers, transmita datos mediante EventArgs y láncelo con el patrón OnX. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C# Academy?
No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 3.
¿Cuánto tiempo toma la lección «Eventos: publicación/suscripción y palabra clave event»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C# Academy?
Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- delegate, Action/Func y cierres
- Eventos: publicación/suscripción y palabra clave event
- Patrones de eventos y errores comunes (fugas de memoria)