Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit voorbeeld ziet u hoe u multicast-gemachtigden maakt. Een handige eigenschap van gedelegeerde objecten is dat u meerdere methoden kunt toewijzen aan één gemachtigde instantie met behulp van de + operator. De multicast-gemachtigde bevat een lijst met de toegewezen gemachtigden. Wanneer u de multicast-gemachtigde aanroept, worden de gemachtigden in de lijst in volgorde aangeroepen. U kunt gemachtigden van hetzelfde type alleen combineren. U kunt de - operator gebruiken om een componentdelegeert van een multicastdelegeert te verwijderen.
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!
*/
Opmerking
U kunt dezelfde gemachtigde meerdere keren toevoegen aan een multicast-gemachtigde. Wanneer u de multicast-gemachtigde aanroept, worden alle gemachtigden in de lijst aangeroepen, inclusief duplicaten. Wanneer u een gemachtigde verwijdert uit een multicast-gemachtigde, wordt de meest rechtse overeenkomende vermelding verwijderd, dus er wordt slechts één exemplaar verwijderd als er meerdere exemplaren zijn.