Événements et délégués
Mise à jour : novembre 2007
Un événement est un message transmis par un objet pour signaler l'occurrence d'une action. L'action peut être provoquée par une interaction utilisateur, telle qu'un clic de souris, ou peut être déclenchée par une autre logique de programme. L'objet qui déclenche l'événement est appelé émetteur d'événement. L'objet qui capture l'événement et y répond est appelé récepteur d'événements.
Lors de la transmission d'un événement, la classe de l'émetteur d'événement ne connaît pas l'objet ou la méthode qui recevront (géreront) les événements qu'elle déclenche. Un intermédiaire (ou un mécanisme de type pointeur) s'avère nécessaire entre la source et le récepteur. Le .NET Framework définit un type spécial (Delegate) qui assure les fonctionnalités d'un pointeur fonction.
Un délégué est une classe pouvant contenir une référence à une méthode. À la différence d'autres classes, une classe déléguée possède une signature et elle ne peut contenir que des références à des méthodes qui correspondent à sa signature. Un délégué est par conséquent l'équivalent d'un rappel de fonction ou d'un pointeur fonction de type sécurisé. Même si les délégués ont d'autres fonctions, cette section traite spécifiquement des fonctionnalités de gestion des événements des délégués. Une déclaration delegate suffit pour définir une classe déléguée. La déclaration fournit la signature du délégué et le Common Language Runtime assure l'implémentation. L'exemple suivant illustre une déclaration delegate d'événement.
public delegate void AlarmEventHandler(object sender, AlarmEventArgs e);
Public Delegate Sub AlarmEventHandler(sender As Object, e As AlarmEventArgs)
La syntaxe est similaire à celle d'une déclaration de méthode ; le mot clé delegate informe toutefois le compilateur qu'AlarmEventHandler est un type délégué. Par convention, les délégués d'événement figurant dans le .NET Framework possèdent deux paramètres, la source qui a déclenché l'événement et les données de l'événement.
Une instance du délégué AlarmEventHandler peut être liée à une méthode qui correspond à sa signature, telle que la méthode AlarmRang de la classe WakeMeUp illustrée dans l'exemple suivant.
public class WakeMeUp
{
// AlarmRang has the same signature as AlarmEventHandler.
public void AlarmRang(object sender, AlarmEventArgs e)
{...};
...
}
Public Class WakeMeUp
' AlarmRang has the same signature as AlarmEventHandler.
Public Sub AlarmRang(sender As Object, e As AlarmEventArgs)
...
End Sub
...
End Class
Les délégués d'événement personnalisés ne sont nécessaires que lorsqu'un événement génère des données d'événement. De nombreux événements, dont certains événements de l'interface utilisateur tels que les clics de souris, ne génèrent pas de données d'événement. Le délégué d'événement figurant dans la bibliothèque de classes de l'événement sans données (System.EventHandler) est dans ce cas approprié. Sa déclaration est la suivante.
delegate void EventHandler(object sender, EventArgs e);
Public Delegate Sub EventHandler(sender As Object, e As EventArgs)
Les délégués d'événement sont multicast, ce qui signifie qu'ils peuvent contenir des références à plusieurs méthodes de gestion des événements. Pour plus d'informations, consultez Delegate. Les délégués assurent une souplesse et un contrôle précis lors de la gestion des événements. Un délégué joue le rôle de répartiteur d'événement pour la classe qui déclenche l'événement en tenant à jour une liste des gestionnaires d'événements inscrits pour l'événement.
Pour plus d'informations sur l'utilisation des délégués pour assurer des fonctionnalités d'événement dans votre composant ou votre contrôle, consultez Déclenchement d'un événement.
Pour obtenir une vue d'ensemble de la consommation des événements dans vos applications, consultez Consommation d'événements.
Voir aussi
Tâches
Comment : déclencher et utiliser des événements
Comment : connecter des méthodes de gestionnaire d'événements aux événements