Saltar al contenido principal
Publicado el

delegate en C#

Compartir:

Introducción

El delegate es una de las características más poderosas en C#, permitiendo a los programadores manejar métodos de manera dinámica y adaptativa. No solo aporta flexibilidad, sino que también es la base de muchos patrones y técnicas avanzadas en C#.

Características del delegate

Inmutabilidad

Una de las primeras cosas a notar sobre un delegate es su inmutabilidad. Cuando asociamos un método a un delegate, no estamos modificando realmente el delegate existente. En cambio, estamos creando un nuevo delegate que combina los métodos del original y del nuevo.

Multicast

El delegate tiene la capacidad de tener varias referencias de métodos asociadas a él. Esto se conoce frecuentemente como la capacidad "multicast" de un delegate. Esta característica permite que un delegate invoque varios métodos en una sola llamada.

Cohesión con Eventos

En C#, los eventos se construyen sobre el concepto de delegate. El delegate actúa como intermediario entre el evento y sus suscriptores, garantizando que el contrato entre ellos se mantenga.

Uso Profundo del delegate

Al profundizar en C#, encontrarás situaciones donde el delegate puede ser extremadamente útil:

  1. Personalización de Algoritmos: Imagina que tienes un método que procesa datos, pero la forma exacta de procesamiento necesita variar. Al usar un delegate, puedes pasar la lógica específica de procesamiento como parámetro.
  2. Callback: En operaciones asíncronas, se puede usar un delegate para especificar la acción a realizar cuando la operación finaliza.
  3. Extensibilidad: En aplicaciones grandes y complejas, el delegate puede usarse para permitir que partes del software se extiendan o modifiquen sin alterar el núcleo del programa.

Ejemplo de Aplicación:

using System;

namespace Base {
  class Delegate {
    private delegate void ConjuntoDeMetodos(string nombre);

    public void Run() {
      Console.Write("Introduce tu nombre y apellido: ");
      var nombre = Console.ReadLine();

      var conjuntoDeMetodos = new ConjuntoDeMetodos(ImprimirNombre);
      conjuntoDeMetodos += ImprimirNombreEnMayusculas;
      conjuntoDeMetodos += ImprimirNombreEnMinusculas;
      conjuntoDeMetodos(nombre);
    }

    public void ImprimirNombre(string nombre) {
      Console.WriteLine($"Nombre: {nombre}");
    }

    public void ImprimirNombreEnMayusculas(string nombre) {
      Console.WriteLine($"Nombre en mayúsculas: {nombre.ToUpper()}");
    }

    public void ImprimirNombreEnMinusculas(string nombre) {
      Console.WriteLine($"Nombre en minúsculas: {nombre.ToLower()}");
    }
  }
}

Este código es un ejemplo de cómo usar la capacidad "multicast" de un delegate, llamando a varios métodos en secuencia.

Conclusión

Comprender el delegate en su totalidad es fundamental para cualquier programador de C#. No solo amplifica la capacidad del código de responder dinámicamente, sino que también es la base de muchos patrones avanzados en C#.

Happy coding!