Alors en fait c'est pas très compliqué une fois qu'on a compris, mais c'est pas forcément facile à expliquer... je vais quand même essayer.
Un EventHandler est un type de delegate ("délégué"), c'est à dire quelque chose qui représente une méthode à appeler plus tard. Ca permet d'appeler une méthode sans savoir à l'avance quelle méthode ce sera...
Il y a plusieurs types de delegates, chacun caractérisé par sa signature. Par exemple, Action est un delegate qui représente une méthode sans paramètre qui ne renvoie pas de valeur. Sa définition est la suivante :
public delegate void Action();
Une variable de type Action peut donc recevoir n'importe quelle méthode qui a une signature compatible. Par exemple :
1 2 3 4 5 6 7 8 9 10 11
| void Main()
{
Action x = Toto;
...
x(); // Appelle en fait Toto()
}
...
void Toto()
{
} |
Pour revenir à EventHandler, c'est un delegate qui représente la méthode qui gère un événement. Sa signature est la suivante :
public delegate void EventHandler(object sender, EventArgs e);
sender représente l'objet qui a déclenché l'événement; e représente les données de l'évènement. En pratique, EventArgs ne contient aucune donnée utile, mais ça sert de classe de base pour les données d'événements plus spécialisés
Un événement est déclaré avec un nom et un type ; ce type est un delegate, qui représente la signature des méthodes qui gèrent cet événement. Par exemple l'événement Click est déclaré comme ça :
public event EventHandler Click;
Autrement dit, les méthodes qui gèrent l'événement Click doivent avoir une signature compatible avec le delegate EventHandler. Par exemple la méthode suivante est compatible :
1 2 3
| private void button1_Click(object sender, EventArgs e)
{
} |
Mais celle ci ne n'est pas, car elle n'a pas les bons paramètres :
1 2 3
| private void button1_Click(int i, string s)
{
} |
Partager