Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet exemple montre comment créer des délégués multidiffusion. Une propriété utile d’objets délégués est que vous pouvez affecter plusieurs méthodes à une instance de délégué à l’aide de l’opérateur + . Le délégué de multidiffusion contient une liste des délégués affectés. Lorsque vous appelez le délégué de multidiffusion, il appelle les délégués dans la liste, dans l’ordre. Vous ne pouvez combiner que des délégués du même type. Vous pouvez utiliser l’opérateur - pour supprimer un délégué de composant d’un délégué multidiffusion.
using System;
namespace DelegateExamples;
// Define a custom delegate that has a string parameter and returns void.
delegate void CustomCallback(string s);
class TestClass
{
// Define two methods that have the same signature as CustomCallback.
static void Hello(string s)
{
Console.WriteLine($" Hello, {s}!");
}
static void Goodbye(string s)
{
Console.WriteLine($" Goodbye, {s}!");
}
static void Main()
{
// Declare instances of the custom delegate.
CustomCallback 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;
// Initialize the delegate object hiDel that references the
// method Hello.
hiDel = Hello;
// Initialize 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!
*/
Note
Vous pouvez ajouter le même délégué à un délégué multicast plusieurs fois. Lorsque vous appelez le délégué de multidiffusion, il invoque tous les délégués de la liste, y compris les doublons. Lorsque vous supprimez un délégué d’un délégué de multidiffusion, il supprime l’entrée correspondante la plus à droite. Une seule instance est donc supprimée s’il existe plusieurs copies.