Des chercheurs danois et suédois en sciences informatiques et systèmes autonomes ont décortiqué la sécurité...
Nvidia se prépare à livrer la plate-forme serveur HGX-2 qui sera capable d'exploiter la puissance de 16 GPU Tesla V100...
L'EMD, une école de commerce située à Marseille ouvre à la prochaine rentrée l'école du numérique...
Del
qui peut encapsuler une méthode acceptant une chaîne (string
) comme argument et qui retourne void :Delegate
du .NET Framework.
Les types délégués sont scellés (sealed
), c'est-à-dire qu'ils ne peuvent pas être faire l'objet d'une dérivation,
et il n'est pas possible de dériver des classes personnalisées à partir de Delegate
.
Étant donné que le délégué instancié est un objet, il peut être passé comme paramètre ou assigné à une propriété.
Cela permet à une méthode d'accepter un délégué comme paramètre et d'appeler le délégué ultérieurement.
Cette opération est connue sous le nom de rappel asynchrone et constitue une méthode courante pour notifier un appelant quand un long processus s'est achevé.
Lorsqu'un délégué est ainsi utilisé, le code qui utilise le délégué n'a pas besoin de connaître l'implémentation de la méthode utilisée.
La fonctionnalité est semblable à l'encapsulation que fournissent les interfaces.Del
comme paramètre :The number is: 3
MethodWithCallback
n'a pas besoin d'appeler la console directement.
La méthode n'a pas à être conçue en l'associant obligatoirement à une console.
En effet, MethodWithCallback
se contente de préparer une chaîne et de la passer à une autre méthode.
Cela est particulièrement efficace, car une méthode déléguée peut utiliser n'importe quel nombre de paramètres.DelegateMethod
montrée précédemment, nous avons désormais trois méthodes pouvant être encapsulées par une instance Del
.+
ou +=
), par exemple :allMethodsDelegate
contient trois méthodes dans sa liste d'invocation :
Method1, Method2 et DelegateMethod
.
Les trois délégués initiaux, d1, d2 et d3
, restent inchangés.
Lors de l'appel de allMethodsDelegate
, les trois méthodes sont appelées dans l'ordre.
Si le délégué utilise des paramètres de référence, la référence est passée séquentiellement à chacune des trois méthodes et toute modification apportée par une méthode est visible dans la méthode suivante.
Quand l'une des méthodes lève une exception qui n'est pas interceptée dans la méthode, cette exception est passée à l'appelant du délégué et aucune des méthodes suivantes dans la liste d'invocation n'est appelée.
Si le délégué a une valeur de retour et/ou des paramètres out
, il retourne la valeur de retour et les paramètres de la dernière méthode appelée.
Pour supprimer une méthode de la liste d'invocation, utilisez l'opérateur de décrémentation ou d'assignation de décrémentation (-
ou -=
), par exemple :System.Delegate
, les méthodes et les propriétés définies par cette classe peuvent être appelées sur le délégué.
Par exemple, pour rechercher le nombre de méthodes dans la liste d'invocation d'un délégué, vous pouvez écrire :MulticastDelegate
, qui est une sous-classe de System.Delegate
.
Le code ci-dessus fonctionne dans les deux cas, car les deux classes prennent en charge GetInvocationList
.System.Delegate
, la comparaison est alors autorisée,
mais retourne la valeur false à l'exécution, par exemple :out
, nous ne recommandons pas son utilisation avec les délégués d'événement multicast,
car vous ne pouvez pas savoir quel délégué sera appelé.Del
, et la méthode associée, MultiplyNumbers
, ont la même signature+
.
Le délégué multicast contient une liste des délégués assignés. Quand le délégué multicast est appelé, il appelle les délégués dans la liste, dans l'ordre.
Seuls des délégués de même type peuvent être combinés.-
pour supprimer un délégué de composant d'un délégué multicast.BookDB
encapsule une base de données de librairie qui tient à jour un inventaire des livres.
Elle expose une méthode, ProcessPaperbackBooks
, qui recherche tous les livres de poche dans la base de données et appelle un délégué pour chacun d'entre eux.
Le type delegate qui est utilisé se nomme ProcessBookDelegate
.
La classe Test
utilise cette classe pour imprimer les titres et le prix moyen des livres de poche.PrintTitle
à la méthode ProcessPaperbackBooks
, comme illustré dans l'exemple suivant :Test.PrintTitle
.
De même, la méthode non statique AddBookToTotal
sur l'objet totaller
est passée comme dans l'exemple suivant :ProcessPaperbackBooks
BeginInvoke
et EndInvoke
.