Ejemplo mínimo sobre delegados
C Sharp es un lenguaje de programación para los proyectos Mono y .Net . Este lenguaje de programación, a diferencia de otros, trae bastantes palabras claves (keywords) para facilitar la vida de los programadores, la palabra clave delegate es una de ellas. El equivalente de los delegados en el lenguaje C/C++ sería un puntero a función (callback). Pero por la complejidad de los punteros a función de el lenguaje C/C++ muchas veces se producen bugs y errores en tiempo de ejecución. C# soluciona el problema incluyendo los delegados. Para crear un delegado se usa la palabra clave delegate, la razón para crear esta palabra clave es por que aporta más seguridad. Considero bueno que los lenguajes de programación tengan muchas palabras claves, aunque cuesta mas aprenderlas ya que son más temas de estudio. Es una inversión para ser más rápido e eficiente a la hora de crear una aplicación.
¿Qué es un delegado en C Sharp?
Antes, creo importante hacer una diferenciación entre lo que es un objeto delegado y un tipo delegado, por que son distintos y se hablara de ellos en todos los mini artículos.
- Un tipo delegado es el que se define con la palabra clave delegate
- En cambió un objeto delegado es una instancia de ese tipo delegado.
Un delegado es un tipo en el cual hay que definir (o firma) que debe cumplir el o los métodos a añadir a su objeto delegado. El objeto delegado puede solicitar llamar a uno o más de el o los métodos añadidos a la vez.
,
Ejemplo sobre delegado en C Sharp
// por Writkas, archivo sin derechos reservados.
// Delegados1.cs : Ejemplo mínimo sobre delegados
using System;
// Un delegado puede estar dentro de una clase, fuera de una clase, dentro de
// un namespace o fuera de un namespace.
// Se crea y define el -tipo- delegado, en la definición (o firma) de un tipo delegado
// se consideran: el tipo de retorno, número de parámetros y el tipo de los parámetros,
// con estas características deben cumplir los métodos que luego se asignarán.
// Para crear un tipo delegado se usa la palabra clave delegate
public delegate int MiDelegado (int parámetro); // Es muy similar a declarar un método
public class Programa
{
public static void Main ()
{
Console.WriteLine ("Se inicia el programa");
// Se crea un objeto de la clase 'OtraClase'
OtraClase objOtraClase = new OtraClase ();
// Se crea un objeto delegado y se le asigna un método, en este ejemplo le
// asignamos solo un método, pero se le pueden asignar más.
// Crear un objeto delegado es muy similar a crear un objeto con una clase, la
// diferencia es que le asignamos un método.
// El método no se llama usando '()' solo se le asigna al objeto delegado, por eso
// no se usan los '()'
MiDelegado objDelegado = new MiDelegado (objOtraClase.Función1);
// Se crea una variable de tipo int y se le asigna el valor de retorno
// del objeto delegado, que es el mismo retorno de el método anteriormente asignado
int retorno = objDelegado (5); // Se hace la llamada de la misma forma que un método
// Muestra el valor de retorno
Console.WriteLine ("El valor devuelto es {0}", retorno);
}
}
public class OtraClase
{
// Este método cumple con el prototipo de el delegado al cual se lo asignamos
public int Función1 (int a)
{
Console.WriteLine ("Soy Función1 y mi argumento es: {0}", a);
return a + 10;
}
}
.
Compilar y ejecutar el programa
writkas@linux-xag2:/home/writkas/> gmcs Delegados1_Comentado.cs writkas@linux-xag2:/home/writkas/> mono Delegados1_Comentado.exe Se inicia el programa Soy Función1 y mi argumento es: 5 El valor devuelto es 15 writkas@linux-xag2:/home/writkas/>
Recuerda
- Un tipo delegado es el cual se define con la palabra clave delegate y un objeto delegado es el objeto de el tipo que se definió anteriormente. También cuando se habla de un delegado es lo mismo que hablar de un tipo delegado.
- Un tipo delegado se define de forma muy parecida a definir un método de una clase. La diferencia es que se usa la palabra clave delegate y otras cosas.
- El tipo delegado crea un objeto delegado de la misma forma que una clase, un objeto delegado se puede inicializar asignando el nombre de el método que se quere añadir, solo el nombre sin usar ‘()’ .
- Se llama a un objeto delegado de la misma forma que a un método, osea se toma en cuenta el tipo de el valor de retorno, el número de parámetros y el tipo de el o los parámetros.
.
Este artículo es una parte más de una serie de artículos que trata de explicar el como usar delegados. Hasta el momento estos son los artículos ->
- C Sharp (C#) – Usar delegados – Ejemplo mínimo sobre delegados
- C Sharp (C#) – Usar delegados – Añadir y quitar métodos a un objeto delegado
- C Sharp (C#) – Usar delegados – ¿Cuándo se ocupan los delegados?
- C Sharp (C#) – Usar delegados – Acceso a miembros de delegados, añadir y quitar métodos y un ejercicio para entender los delegados en C Sharp
.
| Artículo siguiente (Parte 2: Añadir y quitar métodos a un objeto delegado)

Pingback: C Sharp (C#) – Usar Delegados – Parte 3 « El Blog de Writkas!!