Introducción a los delegados en C#


Cuando hablamos de herencia, establecemos la relación “es un” y tenemos los accesos a los métodos de la clase base. Pero cuando una clase requiere acceso a los métodos de otra clase en la que no establece la relación “es un”, podemos implementar los delagados.

Estamos acostumbrados a pasar datos al método como parámetros, con los delegados podremos pasar métodos como parámetros de forma segura. Lo que nos indica que un delegado es un puntero a uno o más métodos o funciones.

Un delegado es un tipo de dato que deriva de System.MulticastDelegate. Pero para declarar el delegado no se utiliza la herencia normal ya que no se establece la relación “es un”.

Es importante que el delegado este declarado igual que las funciones que va a referenciar. Ej: En la primer línea declaramos el delegado y al igual que el método regresa un valor void y se le asigna un parametro del tipo string.

public delegate void Delegado(string mensaje);
public void Mensaje(string mensaje) { [...] }

Después de declarar el delegado, lo podemos definir como una nueva clase y le pasamos como parametro el método Mensaje por medio de la clase Metodos.

Código completo:

using System;
using System.Collections.Generic;
using System.Text;

namespace Delegate
{
	public delegate void Delegado(string mensaje);

	public class Test
	{
		public static void Main()
		{
			Delegado delegado = new Delegado(new Metodos().Mensaje);
			delegado("Hola delegado");
		}
	}

	public class Metodos
	{
		public void Mensaje(string mensaje)
		{
			Console.WriteLine(mensaje);
		}
	}
}

Este fragmento de código le he probado en Mono con OpenSUSE:

$ mcs Delegate.cs
$ mono Delegate.exe
Hola delegado

Los delegado permiten disponer de métodos que sean modificados dinamicamente durante la ejecución. También permiten que unos objetos puedan solicitar a otros que se les informe cuando ocurran ciertos sucesos.

Posted in

Leave a Reply