Ici, je vais expliquer les délégués, les délégués multicast et leur utilisation. Delegate est un type qui contient la ou les méthodes de référence dans un objet. Il est également appelé pointeur de fonction de type sécurisé. Nous pouvons dire qu'un délégué est un type qui définit une signature de méthode.
Lorsque vous instanciez un délégué, vous pouvez associer son instance à n'importe quelle méthode avec une signature compatible. Vous pouvez invoquer (ou appeler) la méthode via l'instance de délégué. Les délégués sont utilisés pour passer des méthodes comme arguments à d'autres méthodes. Les gestionnaires d'événements ne sont rien de plus que des méthodes qui sont appelées via des délégués. Les avantages de l'utilisation des délégués sont: Encapsulation de l'appel de la méthode à partir de l'appelant L'utilisation efficace du délégué améliore les performances de l'application Utilisé pour appeler une méthode de manière asynchrone. Certaines propriétés des délégués sont
Delegates are like C++ function pointers but are type safe.
Delegates allow methods to be passed as parameters.
Delegates can be used to define callback methods.
Delegates can be chained together; for example, multiple methods can be called on a single event.
Methods do not have to match the delegate signature exactly.
public delegate type_of_delegate delegate_name () // Déclaration
You can use delegates without parameters or with parameter list
If you are referring to the method with some data type then the delegate which you are declaring should be in the same format. This is why it is referred to as type safe function pointer. Here I am giving an example with String.
L'exemple suivant montre une opération de délégué:
namespace MyDelegate
{
class Program
{
private delegate void Show(string s);
// Create a method for a delegate.
public static void MyDelegateMethod(string me
ssage)
{
System.Console.WriteLine(message);
}
static void Main(string[] args)
{
Show p = MyDelegateMethod;
p("My Delegate");
p.Invoke("My Delegate");
System.Console.ReadLine();
}
}
}
Qu'est-ce que le délégué de multidiffusion?
C'est un délégué qui détient la référence de plus d'une méthode. Les délégués de multidiffusion doivent contenir uniquement des méthodes qui retournent void, sinon il y a une exception d'exécution.
delegate void MyMulticastDelegate(int i, string s);
Class Class2
{
static void MyFirstDelegateMethod(int i, string s)
{
Console.WriteLine("My First Method");
}
static void MySecondDelegateMethod(int i, string s)
{
Console.WriteLine("My Second Method");
}
static void Main(string[] args)
{
MyMulticastDelegate Method= new MyMulticastDelegate(MyFirstDelegateMethod);
Method+= new MyMulticastDelegate (MySecondDelegateMethod);
Method(1,"Hi"); // Calling 2 Methodscalled
Method-= new MyMulticastDelegate (MyFirstDelegateMethod);
Method(2,"Hi"); //Only 2nd Method calling
}
}
Ici, le délégué est ajouté à l'aide de l'opérateur + = et supprimé à l'aide de l'opérateur - =.
Les types de délégués sont dérivés de la classe Delegate dans le .NET Framework. Les types de délégués sont scellés - ils ne peuvent pas être dérivés. Étant donné que le délégué instancié est un objet, il peut être passé en tant que paramètre ou affecté à une propriété. Cela permet à une méthode d'accepter un délégué en tant que paramètre et d'appeler le délégué ultérieurement. C'est ce qu'on appelle un rappel asynchrone.