Consejos para enseñar – Parte 1

En este artículo veremos algunos tips o consejos, que les puede ayudar a los educadores, profesores, docentes a enseñar sus materias. Posiblemente sean varias partes, esta es la primera.

enseñanza

Primero que nada quiero aclarar que no soy un experto en el tema del aprendizaje por lo que me puedo equivocar, no hay que tomar este artículo como algo oficial, ni científico, ni nada. Mi ámbito es la informática (estudio informática), no es mi área la enseñanza, aprendizaje, etc. Aunque me interesa. También puede que estas técnicas ya sean conocidas y ya tengan un nombre formal, la mayoría de estas ideas las he aprendido por simple observación. Identificando qué técnicas utilizan los educadores que son efectivas y cuáles pueden a veces confundir a los estudiante.

Motivación del estudiante

Quizás este es el factor más importante en el aprendizaje del estudiante. La mayoría de las veces no existe alguna discapacidad en el aprendizaje de alguna materia, sino que una falta de motivación. Es muy común que los estudiante no le vean sentido a ciertas materias para su futuro, por eso hay que motivarlos con razones reales. Y si por algún motivo la asignatura no es del todo útil para los alumnos a futuro, no es buena idea que el docente se los diga a los alumnos.

Muchas palabras confunde

Muchas veces no se es claro con la materia que se quiere dar a conocer, ya sea por falta de planificación o por simple desorganización. Quizás el orden de las palabras y el vocabulario no es adecuado.

Aunque las historias son muy buenas para visualización de una temática y para luego recordar. Pero la conclusión clara y precisa es importante.

Todo el mundo sabe que las frases cortas son fáciles de recordar, por eso importante ser asertivo con lo que se quiere comunicar.

Lenguaje técnico

Es ideal que el estudiante maneje un cierto vocabulario técnico de una materia pero esto tiene un coste. El hablar de manera muy técnica para el educador pude provocar que el estudiante no entienda lo que se quiere decir. Para entender una frase, es necesario comprender todas las palabras de aquella frase y si una de estas palabras es de difícil comprensión o no esta muy entendida se produce una tranca en el entendimiento.

Para solventar este problema nos podemos ayudar con el uso de sinónimos. Yo por ejemplo en los videos tutoriales de sass y compass que doy en elementalcode.net suelo utilizar la palabra “iteración” y luego digo “o repetición”. La palabra “repetición” es más clara pero “iteración” es mas correcta para el ámbito del curso que esta más relacionado con la informática.

El “por qué” de las cosas es importante

¿Por qué? Porque la asociación de las ideas es útil para el aprendizaje. El cerebro tiene un cierto orden para almacenar los recuerdos y el uso de relaciones entre ideas ayuda a recordar.

Muchos veces los educadores dan a conocer partes de sus materias como si estuvieran aisladas entre sí, pero por lo general no es así. La conexión entre las ideas es importante para luego recordar. Por eso el uso de técnicas metacognitivas como por ejemplo los mapas conceptuales son eficientes para el aprendizaje.

Y también esto tiene que ver con la motivación del estudiante, si el estudiante sabe el por qué estudia la materia, de seguro le interesará más. En las universidades suele pasar que los alumnos no se ven en qué van a trabajar y muchas veces pasa que se dan cuenta tarde de que ellos no se ven trabajando para lo que estudiaron.

Frases clave

Me refiero a frases claves, a las frases que ayudan al aprendizaje de algún concepto o materia siendo más emotivas que el resto de las frases. Por ejemplo, en el ámbito de la programación (escribir código en informática), sucede mucho que se vuelven a escribir el mismo código una y otra vez, y muchas veces esto es por falta de organización, hay maneras de no escribir el mismo código una y otra vez. Todo el mundo aconseja de que hay que ser organizado a la hora de escribir código y escribir el código sólo una vez y luego reutilizarlo ese mismo código, para esto hay algunas frases que solemos tener pegadas en la cabeza. Como por ejemplo “Don’t repeat yourself” o “no te repitas”, y muy a pesar de hablar español se suele decir en inglés porque le da un poco más de distinción y emotividad.

Otro ejemplo quizás más claro de alguna frase clave “No hay viento favorable para el que no sabe donde va”. Es una frase muy emotiva, positiva y reflexiva.

¿Comentarios?, ¿Sugerencias?, ¿Correcciones?

Nueva Web

Hola a todos! se que no hay lectores habituales, porque habitualmente no subo cosas y tengo el blog súper botado. Pero les dejo un enlace a mi otra web con unos amigos –>

http://elementalcode.net

Ahí pueden encontrar algunos post míos y de mis amigos, todos orientados a la informática. Este blog lo voy a dejar solo para pensamientos y esas cosas😀.

Lo digo por si alguien cae en este abandonado blog y si le interesaron mis post, tal vez le interese nuestra web.

Saludos🙂

Instalar Skype en Linux

A veces Skype tiene algunos problemas al instalarlo en Linux, por eso voy a intentar explicar cómo instalar Skype en Linux la versión Dynamic (si Dynamic, había dicho aticipado la static pero me confundí). Primero que nada aviso que utilizo OpenSuse. Pero creo que les funcionara a todos (o la mayoría).

Primero hay que bajar el archivo.(la que esta marcada en rojo)

Cuando yo instalo programas en Linux y no hay versiones para OpenSuse o las versiones están desactualizadas o funcionan mal, solo bajo la versión sin empaquetar y tengo una carpeta en la cual coloco todos los programas comprimidos y luego los descomprimo ahí mismo. Ya que muchas veces los programas sin empaquetar (no .rpm, .deb, etc. si .zip, .gz, .tar.gz, etc) dan problemas. En mi caso guardo los programas en:

/home/writkas/programs

Si no la tienes, solo por mantener un orden recomiendo crearla.

mkdir  ~/programs

Luego muevo el archivo comprimido skype a esta carpeta y lo descomprimo. En mi caso el archivo es skype-2.2.0.35.tar.bz2

Luego le cambio el nombre (solo por orden)

cd ~/programs

mv skype-2.2.0.35 skype

Luego ejecuto el programa para comprobar si funciona

cd skype

./skype

Y en el caso de que funcione, crean un acceso directo a la carpeta /user/bin/ y así acceder fácilmente desde la consola. Tengo que estar como root.

su –

Luego de esto escribo la contraseña y luego creo el enlace directo, en mi caso:

ln /home/writkas/program/skype/skype /usr/bin/skype

Así creo un enlace directo a skype, para poder acceder fácilmente desde la consola escribiendo “skype”.

exit

skype

Y Skype debería correr.

A veces hay problemas con la arquitectura del sistema. A veces este programa tiene problemas al correr con en PCs de 64 bits. Pero en mi caso funciona, y si no funciona hay que buscar el problema. Si no funciona, puede que haya que instalar un paquete adicional.

Si les salta un error pueden dejarme el error en los comentarios y ahí vemos si podemos solucionarlo.

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

Hacer llamadas asíncronas usando delegados

Hasta el momento hemos hecho llamadas a métodos de forma síncrona por medio de delegados.dos caminos

¿Qué son las llamadas síncrona? Las llamadas a métodos de forma síncrona son las que siguen el patrón común de los programas de pasar a la próxima instrucción cuando se termine de ejecutar un método. Cuando se ejecuta un método se espera a que se termine la ejecución para pasar a la siguiente instrucción, se espera a que se terminen las instrucciones del método para pasar a la siguiente. Estas son las llamadas a métodos de forma síncrona, son las llamadas a métodos que se ocupan comúnmente.

¿Qué son las llamadas asíncronas? En las llamadas a métodos de forma asíncrona no se espera a que se termine la llamada para pasar a la siguiente instrucción, sino que el programa sigue pasando ordenadamente a la siguientes instrucciones sin esperar a que se termine la llamada. Una llamada asíncrona queda en una especie de hilo de ejecución aparte.

Una de las utilidades de las llamadas asíncronas es evitar que las aplicación principal se congele ya que se puede enviar una tarea pesada a que se ejecute de manera asíncrona (en un hilo de ejecución a parte). Con esto se evita a que la ejecución del programa principal se congele mientras hace una tarea pesada.

Se pueden hacer llamadas asíncronas por medio de delegados. Pero este mecanismo tiene una limitación, es que solo es valido para objetos delegados que almacenen un único método, el -objeto delegado síncrona- debe referenciar un solo método, de lo contrario dará un excepción System.ArgumentExceptión . Pero el objeto delegado que va a ser asíncrono puede referenciar a más de un método.  C Sharp cuenta con algunas clases, interfaces, delegados, etc. predefinidas en el espacio de nombres System para manejar las llamadas síncronas y asíncronas.

Tenemos un delegado, con el cual podemos crear un objeto delegado que puede almacenar un método que se quiere que sea asíncrono. El delegado es:

public delegate void AsyncCallback (IAsyncResult ar)

Tenemos una interfaz, la cual almacena información relativa al método que será llamado de forma asíncrona.

public interface System.IAsyncResult

Y tenemos dos métodos BeginInvoke y EndInvoke, que tienen todos los objetos delegados. BeginInvoke nos sirve para invocar el objeto delegado que referencia a un método síncronos y a la vez invocar un objeto delegado que referencia uno o más métodos de forma asíncrona.

IAsyncResult BeginInvoke (<parámetros>, AsyncCallback cb, Object o)

Como vemos el método ‘BeginInvoke’ devuelve un objeto ‘IAsyncResult’ que contiene información relacionada al resultado de la ejecución de los métodos asíncrona, lo veremos en el ejemplo. En ‘<parámetros>’ esta relacionado con los parámetros del tipo delegado al cual se llama con ‘BeginInvoke’. En ‘Object o’ van un objeto opcional que se le quisiera pasar a los métodos que se ejecutan de manera asíncrona.

<tipoRetorno> EndInvoke (<parámetrosRefOut>, IASyncResult ar)

El método ‘EnInvoke’ sirve para recibir el valor de retorno de los métodos que fueron llamados de manera asíncrona, para saber las excepciones (si es que hubieron). Luego veremos más.

Ahora el ejemplo:

// por Writkas
//
// Delegados5_Comentado.cs : Hacer llamadas asíncronas usando delegados
//
// Compilar en Linux con Mono:
//	gmcs Delegados5_Comentado.cs
//
// Compilar en Linux con Mono en C# 5:
//	gmcs -langversion:future Delegados5_Comentado.cs
//
// Ejecutar:
//	mono Delegados5_comentado.exe

// Recordar que en el namespace System están definidos todos las clases para el
// tratamiento de las llamadas asíncrona y también síncrona.
using System;

// Creamos un tipo delegado común y corriente
delegate void DelegadoAsíncronas (string str);

class Test
{
  public static void Main ()
  {
  // Creamos un objeto delegado común 'objDA' y le asignamos el método 'Método'
    DelegadoAsíncronas objDA = new DelegadoAsíncronas (Método1);
  // El objeto 'objDA' solo debe contener un solo método almacenado si luego se quiere
  // hacer una llamada asíncrona.

  // Se crea un objeto 'AsyncCallback' y se le añade un método 'Método2', para luego
  // enviarle este objeto con su método referenciado al objeto delegado 'objDA' que creamos
  // anteriormente.
  // A continuación se indica que es AsyncCallvack :
  // public delegate void AsyncCallback (IAsyncResult ar)
    AsyncCallback objAC = new AsyncCallback (Método2);

  // Almacena información relativa al método que será llamado de forma asíncrona:
  // public interface System.IAsyncResult
  // Se puede saber si el método asíncrona se termino de ejecutar con la propiedad:
  // public  bool IsCompleted [solo lectura]
  // Se puede saber si el método asíncrona se terminó de ejecutar de manera sícrona con:
  // public bool CompletedSyncronously [solo lectura]
    IAsyncResult objIAR;

  // Lanza la llamada al 'Método2' que está contenida en el objeto delegado 'objAC' de
  // manera asíncrona. el 'Método2' se ejecuta de manera asíncrona (en un hilo de ejecución
  // a parte), pero el método que referencia 'objDA' se ejecuta de manera síncrona.
  // 'IAsyncResult' almacenará información relacionada a ese hilo :
  // IAsyncResult BeginInvoke (, AsyncCallback cb, Object o)
  // En  van los parámetros del típo delegado.
    objIAR = objDA.BeginInvoke ("Hola", objAC, "Hola2");
  // 'objAC' contiene el o los métodos que se quiere que sean asíncronos. '"Hola2"' es
  // un argumento opcional que se le puede enviar a los métodos a ejecutar de forma
  // asíncrona. Es opcional, puede ir tanto '"Hola2"' como 'null'.

  // Cuando se ejecuta el método EndInvoke se muestran los resultados de los métodos
  // llamados, las excepciones que hubieron (si es que hubieron), etc.
  //  EndInvoke (, IASyncResult ar)
    objDA.EndInvoke (objIAR);

  // Si se terminó de ejecutar el hilo o no
    if (objIAR.IsCompleted)
      Console.WriteLine ("Se termino la llamada asíncrona");
    else
      Console.WriteLine ("Aún no termina la llamada asíncrona");

  // Si se terminó de ejecutar el hilo de manera síncrona. Se usa, ya que puede que
  // existan excepciones de las cuales no se informe. Pero esas excepciones se
  // informarán si se utiliza el método EndInvoque.
    if (objIAR.CompletedSynchronously)
      Console.WriteLine ("El hilo se termino de forma síncrona");
  // Si se termino de ejecutar el hilo de manera asíncrona
    else if (objIAR.CompletedSynchronously == false)
      Console.WriteLine ("El hilo se termino de forma asíncrona");

  // Espera a que se presione una tecla
    Console.Read ();
  }

  public static void Método1 (string str)
  {
    Console.WriteLine ("Desde Método1: {0}",str);
  }

  public static void Método2 (IAsyncResult obj)
  {
  // Se obtiene el objeto proporcionado al empezar la ejecución de la operación asíncrona :
  // public object AsyncState [solo lectura]
    Console.WriteLine ("Desde Método2: {0}", obj.AsyncState);
  }
}

La salida:

writkas@linux-xag2:~/Programacion/C#> gmcs -langversion:future Delegados5_Comentado.cs
writkas@linux-xag2:~/Programacion/C#> mono Delegados5_Comentado.exe
Desde Método1: Hola
Desde Método2: Hola2
Se termino la llamada asíncrona
El hilo se termino de forma asíncrona

writkas@linux-xag2:~/Programacion/C#>

Aquí puedes descargar los ejemplos de 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 6: Manejar listas de métodos que referencian los objetos delegados) Artículo anterior | Artículo siguiente (Parte 7: —)

El arte de determinar

Ntribus urbanaso nos gustan las respuestas ambiguas, siempre queremos por lo menos tener una idea de algo, generalizando la peor respuesta en común que tiene la gente es: “tal vez”,  “no se”, “no tengo idea”.

Cuando hemos cambiado, creemos que es porque nosotros queremos u reflexionamos, pero nuestro cerebro cambia continuamente influenciado por el exterior o interior. Hace ya algún tiempo un amigo tuvo un hijo y yo le pregunte algo así: ¿te sientes una persona mas madura o una persona mas tranquila?. Me dijo que si, que ahora veía las cosas diferentes, porque había pensado y tenía una nueva visión de la vida (si mal no recuerdo). Y resulta que las personas se vuelven mas tranquilas y pacíficas cuando nace un hijo, al disminuir la hormona testosterona, y al aumentar otras hormonas. Yo incluso le dije eso y me dijo que no, que era por lo anterior.

El cerebro no se da el enorme trabajo de analizar especialmente a cada una de las personas que conocemos, sino que les asigna una especie de etiqueta la cual engloba a muchas personas más. Es una forma de simplificarse la vida ya que la información del exterior es muy abundante. Inconscientemente estamos determinando a las personas, determinando a que grupo pertenece, que patrón de conducta tienen, cual es su problema, etc. Pero resulta que cuando hablamos con esas personas es frecuente que no encontremos diferencias entre otro tipo de personas que ya conocemos, encontramos más similitud que diferencia.

Como sociedad con el tiempo hemos avanzado, avanzado mucho. Ya no creemos que la tierra es plana, que existen cuatro elementos químicos (fuego, agua, tierra, aire), que existen los brujos, que la tierra es el centro del universo,  etc. ¿Pero como fuimos capases de creer esas cosas si nunca existieron hechos que lo demostraran?. Es muy posible que sea porque nos cuesta aceptar que hay cosas que se nos escapan de las manos, que no tenemos todo el control de nuestra vida. Creo que la mayor parte de lo que decimos son cosas que no están comprobadas o convicciones propias, o cosas que inventamos.

Vivimos determinando lo que no sabemos. Incluso el gran científico Isaac Newton dijo que el tiempo era estático y luego viene Albert Einstein y nos dice que el tiempo es relativo. A diferencia de los otros científicos Einstein fue mucho más cauteloso al decir ciertas cosas, aunque no faltan las malas interpretaciones y sacadas de contexto. Cada vez más los científicos se vuelven más estrictos al afirmar ciertas cosas. Charles Darwin fue también muy cauteloso y dio sugerencias, pero pocas veces afirmaba algo sin sustento (lo hacía, pero mucho menos de lo normal del común de la gente). Aún así Darwin -predijo- la existencia de ciertas especies, de las cuales no se tenían restos fósiles todavía o no se habían descubierto especies en vida en el tiempo en que la genética no lo demostraba. Justamente estos dos científicos “Darwin y Albert Einstein” son los que más quedaron pegados en la historia.

A veces es mejor callar al decir cosas sin sentido, no solo por el ridículo que hace una persona que abusa del afirmar cosas que no sabe, sino por sinceridad y respeto hacia los demás al no producir desinformación. Que la desinformación todavía es abundante en este siglo y probablemente mucho tiempo más.

La  posible solución a nuestro problema es admitir que no lo sabemos todo y que a veces creemos cosas que son fundamentos que están sostenidos en el aire, fundamentos que no tienen bases. Podemos usar palabras como “creo”, “puede ser”, “tienes razón”, “generalizando”, “prácticamente”, “no estoy seguro”, “sugiere”, “lo relaciono con”. Y a la vez se debe evitar la inseguridad o tal vez sea mejor callarse en ciertas situaciones. Sobre todo con las mujeres, las mujeres odian la inseguridad (exagerando) (es bueno que lo sepan). Al usar palabras como “tienes razón” incluso es bueno para las demás personas ya que a las personas les encanta saber que saben lo que hablan. También no digo que esto sea estricto, porque para los políticos usar palabras ambiguas sería la perdición y la ruina. Ya que la mayor parte de la gente quiere un líder que sabe lo que habla o que parezca que sabe lo que habla. Es mejor ser cauteloso hablando cosas manejables, quedarse callado y un poco de ambigüedad (tal vez no es tan mala).

¿Somos tan especiales?

¿Nuestra especie es tan especial como creemos?, ¿Somos especiales?. Estamos en el centro de la zona habitable de nuestro sistema solar; en nuestro planeta se dieron las difíciles consecuencias necesarias para que los ‘mamíferos’ evolucionaran; el planeta júpiter nos protege atrayendo los meteoritos hacia el (pero también los puede impulsar hacia la tierra); tenemos una luna que cumple un papel fundamental para la estabilidad de la tierra ya que estabiliza el eje de la tierra; la luna también hace que nuestro clima sea estable; tenemos un cerebro especial y que posiblemente gracias a el somos la especie de mamíferos dominantes de el planeta (no somos la especie dominante porque nos ganan los adorables insectos); estamos en un universo estable dentro de la mayoría de los posibles universos inestables.

Todo esto suena muy bien. Debemos de ser muy afortunados al estar en un lugar así, en estar en el lugar, tiempo, indicado para que se dieran las condiciones necesarias para nuestra existencia. Pero nos podemos plantear una pregunta, ¿si -no- tuviésemos la capacidad de observar el universo, estaríamos aquí haciéndonos este tipo de preguntas?. La respuesta es no, es muy difícil que una piedra o cualquier otro tipo de material se haga este tipo de preguntas. Nosotros podemos hacer estas preguntas porque nuestro cerebro (nosotros) las desarrolla. Solo somos parte del universo que se observa a si mismo, somos la consecuencia de una infinidad de variables. Puede que existan otros universo donde no se dio la condición para que exista vida inteligente y por lo tanto en esos universos no pueden haber preguntas.

Algunos dicen, ¿Cómo el Big Bang o cualquier otra cosa o algo, va a ser tan inteligente como para crearnos a nosotros uno seres tan complejos?. Pero ¿Es necesario que exista algo con inteligencia para que seamos “creados”?. ¿No puede ser que seamos el resultado de una infinidad de variables que nos hacen existir, solamente?. Como una canica que cae de una escalera ¿Alguien diseño su trayectoria?

Con mi comentario no quiero quitarles la esperanza de ser algo especial dentro del universo, sino que trato de que nos bajemos del altar para poder pensar un poco más. Podemos ser como la trayectoria de una canica que cae de una escalera o algo mas “natural”, como la trayectoria de una piedra que cae de una montaña y que fue impulsada por el viento. Somo especiales porque podemos sentirnos especiales.

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: —)