Super simple exemple pour un Délégué de l'Événement en c#.net?
J'ai besoin d'un exemple très simple à comprendre moi-même sur les événements.Je me sens très mal à comprendre les exemples disponibles dans internet ou dans des livres.
Vous devez vous connecter pour publier un commentaire.
C'est une simple mise en œuvre d'une classe qui expose un événement.
Cette classe peut être utilisée quelque chose comme comme suit:
En matière de contrôle de flux, l'exécution de flux en
SomeMethod()
. Nous allons créer un nouveauChangeNotifier
et en appelle donc à son constructeur. Cela affecte la valeur de10
pour le privénum
membre.Nous avons ensuite vous inscrire à l'événement à l'aide de la
+=
de la syntaxe. Cet opérateur prend un délégué sur le côté droit (dans notre cas, ce délégué est un lambda) et l'ajoute à la collection des délégués sur l'événement. Cette opération n'a pas d'exécuter le code que nous avons écrit dans leChangeNotifier
. Il peut être personnalisé par le biais de laadd
etremove
méthodes sur l'événement, si vous le souhaitez, mais il y a rarement besoin de le faire.Puis nous effectuer quelques opérations simples sur les
Number
de la propriété. Tout d'abord nous attribuer10
, qui gère leset
méthode sur laNumber
propriété avecvalue = 10
. Mais lenum
membre est déjà évalué à10
, de sorte que la conditionnelle initiale est évaluée à faux et rien ne se passe.Puis nous faisons la même chose avec
20
. Cette fois, la valeur est différente, de sorte que nous attribuer la nouvelle valeur denum
et le feu de l'événement. Nous avons d'abord vérifier que l'événement n'est pas null. C'est la valeur null si rien n'a souscrit. Si ce n'est pas null (c'est à dire, si quelque chose est souscrit), nous avons le feu à l'aide de la méthode standard/délégué de la syntaxe. nous appelons simplement la manifestation de l'événement arguments. Cela permettra d'appeler toutes les méthodes qui ont souscrit à l'événement, y compris nos lambda qui va effectuer unConsole.WriteLine()
.Henrik a réussi à nitpicked le potentiel condition de concurrence qui existe si un thread peut être dans
Number
s'setter tandis qu'un autre thread se désabonner d'un auditeur. Je ne considère pas qu'un cas commun pour quelqu'un qui n'est pas encore à comprendre comment des événements, mais si vous êtes inquiète à propos de cette possibilité, de modifier ces lignes:être quelque chose comme ceci:
Si vous avez des C en arrière-plan, vous pouvez voir déléguer comme un pointeur de fonction.