Un Multicast delegate es un delegado pero mantiene referencias a más de un método. Este tipo de delegado debe contener únicamente métodos que devuelvan un void, de otro modo se lanzará una excepción en tiempo de ejecución. Al invocar al delegado, se ejecutarán todos los métodos asociados en el mismo orden en el cual fueron agregados al delegado.
Para agregar métodos al delegado se emplea el operador ‘+=’ y para eliminar métodos del delegado se emplea el operador ‘-=’. Un mismo método se puede añadir a un objeto delegado más de una vez. Veamos un ejemplo:
using System;
public delegate void MiDelegadoMultiCast(int i);
public class Test
{
public static void Main()
{
MiClase miClase = new MiClase();
// instanciamos un delegado. Observa que el método MiMetodo1 de la clase
// MiClase cumple con la firma definida en el delegado
MiDelegadoMultiCast delegado = miClase.MiMetodo1;
delegado(83); // Se hace la llamada al delegado
// agregamos ahora el Metodo2
delegado += miClase.MiMetodo2;
// Se hace la llamada al delegado y se ejecutarán en orden secuencial ambos métodos
delegado(55);
// eliminamos ahora el Metodo1
delegado -= miClase.MiMetodo1;
// Se hace la llamada al delegado y se ejecutará únicamente el Método2
delegado(14);
}
}
public class MiClase
{
public void MiMetodo1(int i)
{
Console.WriteLine("El valor pasado al METODO1 como parámetro es: {0}", i);
}
public void MiMetodo2(int i)
{
Console.WriteLine("El valor pasado al METODO2 como parámetro es: {0}", i);
}
}
Dejo link: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/delegates/using-delegates