Volver a la página principal
lunes 10 febrero 2025
4

Delegados en C#

Los delegados en C# son tipos de datos que actúan como punteros a métodos, permitiendo asignar funciones a variables y pasarlas como parámetros. Son fundamentales para eventos, callbacks y programación funcional en .NET.

¿Cómo funcionan los delegados?

Un delegado se define como un tipo que encapsula una referencia a un método con una firma específica. Esto permite invocar métodos de manera flexible sin conocer su implementación exacta.

Declaración y uso de un delegado

1. Definir el delegado: Se declara con delegate.

2. Asignar un método: Se asocia a una función con la misma firma.

3. Invocar el método: Se ejecuta llamando al delegado.

Ejemplo básico

using System;

public class Program {
    // Definir el delegado
    public delegate void SaludoDelegate(string nombre);

    // Método que coincide con la firma del delegado
    public static void DecirHola(string nombre) {
        Console.WriteLine($"Hola, {nombre}!");
    }

    public static void Main() {
        // Asignar método al delegado
        SaludoDelegate delegado = new SaludoDelegate(DecirHola);

        // Invocar el delegado
        delegado("Carlos");
    }
}

Salida:

Hola, Carlos!

Tipos de delegados en C#

1. Delegados estándar (Func, Action, Predicate)

Para simplificar código, C# proporciona delegados genéricos:

  • Action<T>: Representa métodos que no devuelven valor (void).
  • Func<T, TResult>: Representa métodos que devuelven un valor.
  • Predicate<T>: Representa métodos que devuelven bool.

Ejemplo con Func<int, int>:

Func<int, int> cuadrado = x => x * x;
Console.WriteLine(cuadrado(5)); // 25

2. Delegados Multicast

Un delegado puede apuntar a varios métodos.

public static void Adios(string nombre) {
    Console.WriteLine($"Adiós, {nombre}!");
}

SaludoDelegate multiDelegado = DecirHola;
multiDelegado += Adios;
multiDelegado("Ana");

Salida:

Hola, Ana!  
Adiós, Ana!

3. Delegados en eventos

Son clave en el manejo de eventos con event:

public delegate void EventoHandler(string mensaje);
public class Notificador {
    public event EventoHandler Evento;
    public void DispararEvento() {
        Evento?.Invoke("¡Evento activado!");
    }
}
Etiquetas:
csharp
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer