0Pricing
C# Academy · Lección

Delegados y eventos

Aprenda cómo los delegados y eventos permiten la comunicación entre objetos en C#

Delegados y eventos es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 5 de 6. 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 6 lecciones en total.

Delegados y eventos

Delegados y eventos

¡Bienvenido a la siguiente lección! En esta lección, aprenderá sobre los delegados y los eventos en C#, su propósito y cómo permiten la programación basada en eventos. ¡Comencemos!

Delegados y eventos — ilustración 1

¿Qué es un delegado?

¿Qué es un delegado?

Un delegate es un tipo que representa una referencia a un método. Permite pasar métodos como parámetros e invocarlos dinámicamente.

Punto clave: Los delegados son esenciales para implementar eventos y funciones de devolución de llamada en C#.

Definición y uso de delegados

Definición y uso de delegados

Para definir un delegado, utilice la palabra clave delegate. Ejemplo:

using System;

class Program {
    // Define a delegate
    public delegate void MessageDelegate(string message);

    static void DisplayMessage(string message) {
        Console.WriteLine(message);
    }

    static void Main() {
        // Create a delegate instance
        MessageDelegate msg = DisplayMessage;

        // Invoke the delegate
        msg("Hello, Delegates!");
    }
}

Delegados multicast

Delegados multicast

Un solo delegado puede apuntar a varios métodos, y todos los métodos se invocarán en orden. Ejemplo:

Consejo: Utilice delegados multicast cuando sea necesario realizar varias acciones.

using System;

class Program {
    public delegate void MessageDelegate(string message);

    static void ShowMessage(string message) {
        Console.WriteLine("Message: " + message);
    }

    static void LogMessage(string message) {
        Console.WriteLine("Log: " + message);
    }

    static void Main() {
        MessageDelegate msg = ShowMessage;
        msg += LogMessage; // Add another method

        msg("Hello, Multicast Delegates!"); // Both methods are invoked
    }
}

¿Qué es un evento?

¿Qué es un evento?

Un event es un mecanismo que permite a una clase notificar a otras clases u objetos cuando ocurre algo de interés. Los eventos se basan en delegados.

Punto clave: Los eventos permiten un acoplamiento débil entre publicadores y suscriptores en la programación basada en eventos.

Definición y uso de eventos

Definición y uso de eventos

Para definir un evento, utilice la palabra clave event junto con un tipo delegado. Ejemplo:

Punto clave: Los eventos permiten crear sistemas reactivos y basados en eventos.

using System;

class Publisher {
    public delegate void NotifyDelegate(string message);
    public event NotifyDelegate Notify; // Define an event

    public void RaiseEvent(string message) {
        Notify?.Invoke(message); // Invoke the event
    }
}

class Subscriber {
    public void OnNotify(string message) {
        Console.WriteLine("Subscriber received: " + message);
    }
}

class Program {
    static void Main() {
        Publisher pub = new Publisher();
        Subscriber sub = new Subscriber();

        pub.Notify += sub.OnNotify; // Subscribe to the event
        pub.RaiseEvent("Hello, Events!"); // Raise the event
    }
}

Cancelación de la suscripción a eventos

Cancelación de la suscripción a eventos

Los suscriptores pueden cancelar su suscripción a los eventos mediante -=` operator. Example:

Consejo: Cancele siempre la suscripción a los eventos para evitar fugas de memoria.

using System;

class Publisher {
    public delegate void NotifyDelegate(string message);
    public event NotifyDelegate Notify;

    public void RaiseEvent(string message) {
        Notify?.Invoke(message);
    }
}

class Subscriber {
    public void OnNotify(string message) {
        Console.WriteLine("Subscriber received: " + message);
    }
}

class Program {
    static void Main() {
        Publisher pub = new Publisher();
        Subscriber sub = new Subscriber();

        pub.Notify += sub.OnNotify; // Subscribe
        pub.RaiseEvent("First Message");

        pub.Notify -= sub.OnNotify; // Unsubscribe
        pub.RaiseEvent("Second Message"); // No output, as subscriber is removed
    }
}

Desafío práctico

Desafío práctico

Cree un delegado CalculationDelegate para operaciones aritméticas y un evento OnCalculate. Escriba un programa que active el evento y realice cálculos. Ejemplo:

using System;

class Calculator {
    public delegate void CalculationDelegate(double result);
    public event CalculationDelegate OnCalculate;

    public void Add(double a, double b) {
        double result = a + b;
        OnCalculate?.Invoke(result);
    }
}

class Program {
    static void Main() {
        Calculator calc = new Calculator();

        // Subscribe to the event
        calc.OnCalculate += result => Console.WriteLine("Result: " + result);

        calc.Add(5, 3); // Outputs: Result: 8
    }
}

¡Excelente trabajo!

¡Excelente trabajo!

¡Felicidades! Ha aprendido a utilizar delegados y eventos para crear programas dinámicos y basados en eventos. En la próxima lección, exploraremos el trabajo con colecciones, como listas, diccionarios y colas. ¡Sigamos programando!

Delegados y eventos — ilustración 10

Preguntas frecuentes

¿La lección «Delegados y eventos» es gratis?

Sí — el texto completo de «Delegados y eventos» 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 6 lecciones en total.

¿Qué aprenderé en «Delegados y eventos»?

Aprenda cómo los delegados y eventos permiten la comunicación entre objetos en C# 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 5 de 6.

¿Cuánto tiempo toma la lección «Delegados y eventos»?

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. Introducción a las interfaces
  2. Clases abstractas
  3. Miembros y métodos estáticos
  4. Exploración de enumeraciones y estructuras
  5. Delegados y eventos
  6. Trabajo con colecciones: listas, diccionarios y colas
← Volver a C# Academy