C Sharp (C#) – Usar Delegados – Parte 6

Manejar listas de métodos que referencian los objetos delegados.

En este artículo veremos:c# logo no oficial del lenguaje de programacion c sharp

  • Como manejar las listas de métodos que referencian los objetos delegados para saber sus métodos y su clase.
  • Combinar 2 objetos delegados (se combinan las listas de métodos que contienen los objetos delegados)
  • Ejecutar todos los métodos que referencia un objeto delegado.

.

El próximo código es un ejemplo puramente teórico que muestra los puntos anteriormente dichos.

// por Writkas, archivo sin derechos reservados.
//
// Delegados4_Comentado.cs : Ejemplo puramente teórico que muestra como manejar las listas
//	de métodos que referencian los objetos delegados para saber sus métodos y su
//	clase, combinar dos objetos delegados y ejecutar todos los métodos que referencia
//	un objeto delegado.
//
// Compilar en Linux con Mono:
//	gmcs Delegados4_Comentado.cs
//
// Ejecutar:
//	mono Delegados4_comentado.exe

using System;
using System.Reflection;

delegate int MiTipoDelegado (int Parámetro);

public class Programa
{
	public static void Main ()
	{
		Console.WriteLine ("Se inicia el programa\n");

		OtraClase objOtraClase = new OtraClase ();

	//	Ya que la palabra clave 'delegate' representa una clase sellada
	//	'System.MulticastDelegate', sus intancias pueden ser inicializadas como cualquier
	//	otra clase.
	//	Entonces ->
	//	MiTipoDelegado miObjDelegado1 = new MiTipoDelegado (objOtraClase.Método1);
	//	Es lo mismo que -->
		MiTipoDelegado miObjDelegado1 = objOtraClase.Método1;

		miObjDelegado1 += objOtraClase.Método2;

		MiTipoDelegado miObjDelegado2 = objOtraClase.Método3;

	//	Este es el objeto delegado que contendra los métodos de 'miObjDelegado1'
	//	y también los de 'miObjDelegado2'. Es importante asignarle un valor nulo (null)
		MiTipoDelegado miObjDelegado3 = null;

	//	Información sobre los objetos delegados tratados gracias a la clase
	//	'TratarDelegados'
		Console.WriteLine ("Mostrar información de 'miObjDelegado1'");
		TratarDelegados.InformaciónObjDelegado (miObjDelegado1);
		Console.WriteLine ("\nMostrar información de 'miObjDelegado2'");
		TratarDelegados.InformaciónObjDelegado (miObjDelegado2);
		Console.WriteLine ("\nMostrar información de 'miObjDelegado3'");
		TratarDelegados.InformaciónObjDelegado (miObjDelegado3);

	//	Combinar los objetos delegados que contienen métodos, para que los contenga
	//	un solo objeto delegado. Y mostrar información de los objetos delegados.
		Console.WriteLine ("\nLuego de combinar los objetos delegados 'miObjDelegado1'");
		Console.WriteLine ("y 'miObjDelegado2' en 'miObjDelegado3'");
		miObjDelegado3 += miObjDelegado1 + miObjDelegado2;
		Console.WriteLine ("\nMostrar información de 'miObjDelegado3'");
		TratarDelegados.InformaciónObjDelegado (miObjDelegado3);

	//	Llamar a todos los métodos de 'miObjDelegado3'
		Console.WriteLine ("\nLlamar a los métodos de 'miObjDelegado3'");
		miObjDelegado3 (5);
	}
}

public class OtraClase
{
	public int Método1 (int a)
	{
		int retorno = a + 10;

		Console.WriteLine ("Soy Método1 y mi argumento es: {0} y retorno: {1}",
		  a, retorno);

		return retorno;
	}

	public int Método2 (int a)
	{
		int retorno = a + 20;

		Console.WriteLine ("Soy Método2 y mi argumento es: {0} y retorno: {1}",
		  a, retorno);

		return retorno;
	}

	public int Método3 (int a)
	{
		int retorno = a + 30;

		Console.WriteLine ("Soy Método3 y mi argumento es: {0} y retorno: {1}",
		  a, retorno);

		return retorno;
	}
}

public class TratarDelegados
{

	public static void InformaciónObjDelegado (Delegate objDel)
	{
		Console.WriteLine ("Información del objeto delegado");

		if (objDel == null) {
			Console.WriteLine ("\tEl objeto delegado no referencia a ningún método");
			return;
		}

		foreach (Delegate d in objDel.GetInvocationList ()) {
			Console.WriteLine ("\tNombre del método: {0}", d.Method);
			Console.WriteLine ("\tNombre de su clase: {0}", d.Target);
		}
	}
}

Ahora compilar y ejecutar –>

writkas@linux-xag2:~> gmcs Delegados4_Comentado.cs
writkas@linux-xag2:~> mono Delegados4_Comentado.exe
Se inicia el programa

Mostrar información de 'miObjDelegado1'
Información del objeto delegado
Nombre del método: Int32 Método1(Int32)
Nombre de su clase: OtraClase
Nombre del método: Int32 Método2(Int32)
Nombre de su clase: OtraClase

Mostrar información de 'miObjDelegado2'
Información del objeto delegado
Nombre del método: Int32 Método3(Int32)
Nombre de su clase: OtraClase

Mostrar información de 'miObjDelegado3'
Información del objeto delegado
El objeto delegado no referencia a ningún método

Luego de combinar los objetos delegados 'miObjDelegado1'
y 'miObjDelegado2' en 'miObjDelegado3'

Mostrar información de 'miObjDelegado3'
Información del objeto delegado
Nombre del método: Int32 Método1(Int32)
Nombre de su clase: OtraClase
Nombre del método: Int32 Método2(Int32)
Nombre de su clase: OtraClase
Nombre del método: Int32 Método3(Int32)
Nombre de su clase: OtraClase

Llamar a los métodos de 'miObjDelegado3'
Soy Método1 y mi argumento es: 5 y retorno: 15
Soy Método2 y mi argumento es: 5 y retorno: 25
Soy Método3 y mi argumento es: 5 y retorno: 35
writkas@linux-xag2:~>

Eso es, espero que les sirva. Si algo no entienden, por favor no duden en escribir un comentario para hacer algunos retoques al artículo

Aquí puedes descargar los ejemplos de los delegados en C Sharp que hemos visto hasta ahora

logo descargar

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 ->

  1. C Sharp (C#) – Usar delegados – Ejemplo mínimo sobre delegados
  2. C Sharp (C#) – Usar delegados – Añadir y quitar métodos a un objeto delegado
  3. C Sharp (C#) – Usar delegados – ¿Cuándo se ocupan los delegados?
  4. 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
  5. C Sharp (C#) – Usar delegados – Usar delegados para facilitar el uso de eventos
  6. C Sharp (C#) – Usar delegados – Manejar listas de métodos que referencian los objetos delegados

.

(Parte 5: Usar delegados para facilitar el uso de eventos) Artículo anterior | Artículo siguiente (Parte 7: —)

One thought on “C Sharp (C#) – Usar Delegados – Parte 6

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s