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

Añadir y quitar métodos a un objeto delegado

En realidad los delegados no son un tema corto, por lo que irán varios mini artículos mas. También, en el ejemplo del mini artículo anterior, se añadió un solo método a un objeto delegado, pero había dicho que también se pueden añadir uno o mas métodos a un objeto delegado y luego en el caso de ser varios métodos se podían ejecutar de forma ordenada a través del objeto delegado (también se puede ejecutar de otras formas pero, ya se vera eso mas adelante). En este mini artículo se verá como añadir y quitar métodos a un objeto delegado y ejecutarlos de forma ordenada.

Normalmente cuando se crea un objeto delegado, en la misma linea (o sentencia) se incluye el primer método que le asignamos. Pero ¿como añadimos más métodos a un objeto delegado? en el caso de que se quera añadir o quitar métodos a un objeto delegado, se usa los operadores ‘+=’ para añadir y ‘-=’ para quitar métodos. Estos son operadores sobrecargados para que el uso de los objetos delegados sean mas intuitivos.

Ejemplo de como añadir y quitar métodos a un objeto delegado

// por Writkas, archivo sin derechos reservados.
// Delegados2.cs : Añadir y quitar métodos a un objeto delegado

using System;

public class Programa
{
 // Se crea y define un tipo delegado, se puede definir también dentro de una clase.
 // Se define el tipo delegado, tipo de retorno, numero de parámetros y tipos de parámetros. Los
 // métodos a asignar al objeto delegado deben cumplir con esta definición, o si no dará error.
 public delegate void TipoDelegado ();

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

 // Se crea una objeto de la clase Programa
   Programa objPrograma = new Programa ();

 // Se crea un objeto de el tipo delegado y se le añade un método. No importá si el método es de
 // un objeto de la propia clase
   TipoDelegado objDelegado = new TipoDelegado (objPrograma.Método1);

 // Se añade al objeto delegado un método, ahora el objeto delegado tendrá 2 métodos añadidos.
 // Al añadir un primer método a un delegado se puede usar el operador de asignación '=' pero
 // si quisiéramos añadir otro método se tiene que usar el operador '+=' , como lo siguiente.
   objDelegado += new TipoDelegado (objPrograma.Método2);

   Console.WriteLine ("Se llamará al objeto delegado con los métodos ya asignados");
   objDelegado ();

   Console.WriteLine ("Se llamará al objeto delegado después de quitar Método2");
 // Quitar el método 'Método2' y luego llamar al objeto delegado
   objDelegado -= new TipoDelegado (objPrograma.Método2);
   objDelegado ();

 // Se puede añadir el mismo método mas de una ves
   Console.WriteLine ("Se añade -de nuevo- Método1");
   objDelegado += new TipoDelegado (objPrograma.Método1);
   objDelegado ();
 }

 // Observa que los métodos cumplen con la definición del tipo delegado
 public void Método1 ()
 {
   Console.WriteLine ("Soy Método1");
 }

 public void Método2 ()
 {
   Console.WriteLine ("Soy Método2");
 }
}

El resultado es (en Linux usando Mono y el Terminal) ->

writkas@linux-e1ht:~/proyectos> mcs Delegados2.cs
writkas@linux-e1ht:~/proyectos> mono Delegados2.exe
Se inicia el programa
Se llamará al objeto delegado con los métodos ya asignados
Soy Método1
Soy Método2
Se llamará al objeto delegado después de quitar Método2
Soy Método1
Se añade -de nuevo- Método1
Soy Método1
Soy Método1
writkas@linux-e1ht:~/proyectos>

Enfatizo

  • Un tipo delegado se puede definir dentro de una clase, fuera de una clase, dentro de un namespace o fuera de un namespace.
  • Al inicializar un objeto delegado, se le puede asignar un método usando el operador ‘=’ , pero para asignar o quitar otros métodos al objeto delegado se tiene que usar los operadores ‘+=’ y ‘-=’.
  • Para añadir y quitar un método a un objeto delegado se utilizan los operadores ‘+=’ para añadir y ‘-=’ para quitar un método.
  • Al llamar al objeto delegado se ejecutan los métodos que almacena de forma ordenada, salen al mismo orden de como se añadieron. Osea, si se añade Método1 y luego Método2, al llamar al objeto delegado saldrán Método1 primero y luego Método2.
  • Un mismo método se puede añadir a un objeto delegado más de una ves.

Ya irán mas mini artículos sobre el tema sobre usar delegados en C Sharp. Puede que gente que sabe sobre este tema diga que estoy ignorando muchas cosas sobre este tema los delegados, pero eso estoy haciendo, para ir de forma ordenada y que se entienda mejor el tema.

.

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

.

(Parte 1: Añadir y quitar métodos a un objeto delegado) Artículo anterior | Artículo siguiente (Parte 3: ¿Cuándo se usan los delegados?)

2 thoughts on “C Sharp (C#) – Usar Delegados – Parte 2

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

  2. Pingback: C Sharp (C#) – Usar delegados – Parte 1 « El Blog de Writkas!!

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