Cómo: Combinar delegados (delegados de multidifusión) (Guía de programación de C#)

En este ejemplo se muestra cómo se crean delegados de multidifusión. Una propiedad útil de los objetos delegate es que se pueden asignar varios objetos a una única instancia del delegado con el operador +. El delegado de multidifusión contiene una lista de los delegados asignados. Cuando se llama al delegado de multidifusión, este invoca los delegados de la lista, en orden. Solo pueden combinarse delegados del mismo tipo.

El operador - se puede usar para quitar un delegado componente de un delegado de multidifusión.

Ejemplo

using System;

// Define a custom delegate that has a string parameter and returns void.
delegate void CustomDel(string s);

class TestClass
{
    // Define two methods that have the same signature as CustomDel.
    static void Hello(string s)
    {
        System.Console.WriteLine("  Hello, {0}!", s);
    }

    static void Goodbye(string s)
    {
        System.Console.WriteLine("  Goodbye, {0}!", s);
    }

    static void Main()
    {
        // Declare instances of the custom delegate.
        CustomDel hiDel, byeDel, multiDel, multiMinusHiDel;

        // In this example, you can omit the custom delegate if you 
        // want to and use Action<string> instead.
        //Action<string> hiDel, byeDel, multiDel, multiMinusHiDel;

        // Create the delegate object hiDel that references the
        // method Hello.
        hiDel = Hello;

        // Create the delegate object byeDel that references the
        // method Goodbye.
        byeDel = Goodbye;

        // The two delegates, hiDel and byeDel, are combined to 
        // form multiDel. 
        multiDel = hiDel + byeDel;

        // Remove hiDel from the multicast delegate, leaving byeDel,
        // which calls only the method Goodbye.
        multiMinusHiDel = multiDel - hiDel;

        Console.WriteLine("Invoking delegate hiDel:");
        hiDel("A");
        Console.WriteLine("Invoking delegate byeDel:");
        byeDel("B");
        Console.WriteLine("Invoking delegate multiDel:");
        multiDel("C");
        Console.WriteLine("Invoking delegate multiMinusHiDel:");
        multiMinusHiDel("D");
    }
}
/* Output:
Invoking delegate hiDel:
  Hello, A!
Invoking delegate byeDel:
  Goodbye, B!
Invoking delegate multiDel:
  Hello, C!
  Goodbye, C!
Invoking delegate multiMinusHiDel:
  Goodbye, D!
*/

Vea también

Referencia

Eventos (Guía de programación de C#)

MulticastDelegate

Conceptos

Guía de programación de C#

Historial de cambios

Fecha

Historial

Motivo

Septiembre de 2010

Se ha aclarado la explicación y el código de ejemplo.

Comentarios de los clientes.