0Pricing
C# Academy · Lección

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

Comprobación rápida: ¿Qué palabra clave de C# expone un delegado para suscribirse y cancelar la suscripción, pero evita que el código externo lo invoque directamente?

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

  1. delegate, Action/Func y cierres
  2. Eventos: publicación/suscripción y palabra clave event
  3. Patrones de eventos y errores comunes (fugas de memoria)
← Volver a C# Academy