Coucou ici,
Enderith à plutot bien présenté la chose, je vais essayer de faire de même avec un exemple simpliste.
C'est vrai que les events sont pas forcément facile a comprendre. Il faut les prendre comme une aide très utile pour écrire le moins de code possible, une fois qu'on les connais un peu ils deviennent indispensable (ca dépend du scénario). Je prends un scénario peut être trop simpliste et complètement loufoque mais qui donne une vision des choses :
Imaginons que j'ai d'un coté un contact avec ses propriétés, comme son nom, prénom, adresse etc. De l'autre côté j'ai des services qui utilisent cette donnée pour diverses choses, affichage en direct sur une application sur mon PC, sur mon mobile, ou que cette donnée soit lié a mon compte facebook et twitter (je rappel c'est pour l'exemple). Comme j'ai bien fait les choses, j'ai ajouté un event a mon contact, qui fait que lorsque je vais le modifier, tous les services qui sont abonnées a mon événement vont être alerté que ma donnée à changé et vont pouvoir réagir en conséquence (rafraîchissement de l'affichage ou mise à jour d'une bdd a distance par exemple).
Tu peux ramener sa a un scénario plus local. Par exemple tu as un long processus qui prend 10 secondes a se faire. Il comporte plusieurs étapes, on va dire 5. Et tu aimerais que pendant ce traitement, dans ta console ou ton interface on t'indique où en est ce processus, avec une phrase par exemple. Donc tu crée un event (qui utilise comme argument un string pour notre exemple), on le nomera Report. Dans mon long calcul je vais donc pouvoir lever mon event a chaque fois qu'une étape se termine. A la fin de l'étape 1 je ferais donc Report("Fin de l'étape 1"), ce qui va donc distribuer la phrase "fin de l'étape 1" à tous ceux qui sont abonné. Dans notre petit scénario, on utilisera donc se string pour l'afficher soit dans notre console ou sur notre interface. C'est aussi bête que ca.
Évidemment il y a des scénarios bien plus complexe ou l'event devient juste la chose indispensable. Enfin indispensable pas forcement en bidouillant on arrivera certainement toujours plus ou moins a contourner le problème, c'est pour ca que je préfère dire que les events (et donc les delegate) sont des options qui simplifies la vie.
J'espère que sa t'aura éclairer, si tu veux un peu de code pour illustrer la chose ca peu se faire, mais tu trouveras sur le net je pense.