6
votes

Quand l'enregistrement du gestionnaire d'événements se produit-il?

Nous utilisons souvent un gestionnaire d'événements en C #, comme ci-dessous:

some_event+=some_event_handler;


2 commentaires

Une petite note: "Certain_event" contient une liste Liste d'adresses d'entrée, il est possible que plusieurs manutentions sont souscrives au même événement.


Merci Hans, pour le rappel.


4 Réponses :


0
votes

Si vous devez les suivre peut-être que vous avez besoin de manutention manuelle des événements avec les mots-clés Ajouter et supprimer . Jetez un coup d'œil à cette http://msdn.microsoft. com / fr-nous / bibliothèque / 8627Sbea (vs.71) .aspx (de l'exemple 2 sur)

Et oui, j'ai oublié, les événements sont enregistrés au moment de l'exécution


1 commentaires

Merci Astorcas, je vais jeter un coup d'œil à cela.



0
votes

L'abonnement se produit au moment de l'exécution. Il peut être à l'intérieur conditionnel.


2 commentaires

Merci Pavel. J'ai juste besoin de la preuve. ;)


Une preuve, comme une preuve mathématique? :) Si cela se produirait au moment de la compilation, vous ne seriez pas en mesure de souscrire de manière conditionnelle lorsque le fait de si l'abonnement est demandé n'est pas connu à l'heure de la compilation. Quoi qu'il en soit, regardez MSIL.



1
votes

Nous pouvons dire que cela concerne les délégués . Un délégué La variable est attribué une méthode de manière dynamique. Cela nous donne la possibilité d'écrire des méthodes de plug-in.

Concernant l'instance et la méthode statique cible juste une note de C # en nutShell

Lorsqu'un objet de délégué est attribué à une méthode d'instance, l'objet délégué doit maintenir une référence non seulement à la méthode, mais aussi à l'instance à laquelle la la méthode appartient. La propriété cible du système.Delegate représente cette instance (et sera null pour un délégué faisant référence à une méthode statique).


0 commentaires

0
votes

Le code n'est qu'une instruction, similaire à un appel de méthode, et se produit donc dans le flux d'exécution naturel au point que vous avez placé, que ce soit à l'intérieur d'une boucle, de la déclaration IF ou similaire.

comme tel, avant La déclaration a été exécutée, l'événement n'a pas été attribué au gestionnaire d'événements. Peu importe (dans ce contexte) si l'événement est un événement statique ou instance. P>

Vous pouvez déterminer comment le code se comporte en comparant celui-ci à ce code: P>

some_event = Delegate.Combine(some_event, some_event_handler);


0 commentaires