CSharp

Tutorial CSharp: Eventos

CSharp eventos: manejo y ejemplos. Aprende a manejar eventos en CSharp con ejemplos prácticos y detallados.

Los eventos en C# son una forma de proporcionar notificaciones a los clientes de un objeto cuando ocurre alguna acción o actividad en ese objeto. Los eventos son utilizados en situaciones en las que se necesita que un objeto notifique a otros objetos cuando algo ocurre. Esto es particularmente útil en entornos de interfaz gráfica de usuario (GUI) en los que, por ejemplo, un botón puede notificar a un objeto de evento cuando se hace clic en él.

En C#, los eventos se implementan utilizando delegados. Un delegado es un tipo que define y contiene referencias a métodos con un tipo de parámetro y devolución particular. En otras palabras, es un puntero a un método. Los eventos se pueden considerar como contenedores para instancias de delegados.

Crear un Evento

Para crear un evento en C#, se necesitan varios elementos:

  1. Delegado: Se necesita definir el delegado que se utilizará para el evento. El delegado tiene la firma del método que puede manejar el evento.

  2. Evento: Después de definir el delegado, se puede definir el evento utilizando la palabra clave event seguida del delegado.

  3. Invocar el evento: Se necesita una forma de invocar el evento. Esto se hace generalmente dentro del objeto que define el evento y se puede hacer en un método que se llama cuando se quiere notificar a los objetos suscritos al evento.

Un ejemplo de código para ilustrar esto:

public delegate void CambioDeNombreDelegado(string nuevoNombre);

public class Usuario
{
    public event CambioDeNombreDelegado CambioDeNombreEvento;

    private string nombre;
    public string Nombre
    {
        get
        {
            return nombre;
        }
        set
        {
            nombre = value;
            CambioDeNombreEvento?.Invoke(nombre);
        }
    }
}

En este ejemplo, se define un delegado CambioDeNombreDelegado que toma una cadena como parámetro. Luego, en la clase Usuario, se define un evento CambioDeNombreEvento que utiliza este delegado. Dentro del set del atributo Nombre, se invoca el evento CambioDeNombreEvento cada vez que se cambia el nombre del usuario. La sintaxis CambioDeNombreEvento?.Invoke(nombre); invoca el evento si y solo si el evento no es null (es decir, si hay algún suscriptor al evento). De esta manera, si se intenta invocar un evento sin ningún suscriptor no se lanza ningún error, y no sucede nada.

Suscribirse a un Evento

Para suscribirse a un evento, es necesario definir un método que coincida con la firma del delegado utilizado para el evento, y luego agregar ese método al evento.

Aquí un ejemplo:

public class MonitorDeUsuario
{
    public MonitorDeUsuario(Usuario usuario)
    {
        usuario.CambioDeNombreEvento += Usuario_CambioDeNombreEvento;
    }

    private void Usuario_CambioDeNombreEvento(string nuevoNombre)
    {
        Console.WriteLine($"El nombre del usuario ha cambiado a {nuevoNombre}");
    }
}

En este ejemplo, la clase MonitorDeUsuario se suscribe al evento CambioDeNombreEvento en el constructor, proporcionando el método Usuario_CambioDeNombreEvento que coincida con la firma del delegado CambioDeNombreDelegado. Ahora, cada vez que se cambia el nombre del usuario, se llama al método Usuario_CambioDeNombreEvento y se imprime un mensaje en la consola. El símbolo += permite añadir una nueva suscripción sin cancelar las ya existentes.

Resumen

Los eventos son una parte crucial de C#, especialmente al trabajar con aplicaciones de interfaz de usuario. Aunque este ejemplo es bastante simple, los eventos pueden ser mucho más complejos, con múltiples objetos que se suscriben a los eventos y con eventos que pasan datos más complejos a sus suscriptores. Pero los conceptos básicos permanecen igual: los eventos permiten que los objetos notifiquen a otros objetos cuando algo de interés les sucede, y los delegados proporcionan la flexibilidad para definir y manejar estos eventos de manera eficiente.

Certifícate en CSharp con CertiDevs PLUS

Ejercicios de esta lección Eventos

Evalúa tus conocimientos de esta lección Eventos con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Todas las lecciones de CSharp

Accede a todas las lecciones de CSharp y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

En esta lección

Objetivos de aprendizaje de esta lección

  1. Entender qué son los eventos en C# y su importancia en la comunicación entre objetos.
  2. Aprender a crear un evento en C#, incluyendo la definición de un delegado y la invocación del evento.
  3. Conocer cómo suscribirse a un evento mediante la implementación de un método que coincida con la firma del delegado y agregándolo al evento.
  4. Familiarizarse con el uso de eventos para notificar a los objetos suscritos cuando ocurren acciones relevantes.
  5. Comprender que los eventos son esenciales en escenarios como aplicaciones con GUI para manejar interacciones y actualizaciones de manera eficiente.