6
votes

Comment éviter les méthodes anonymes dans l'abonnement d'événement "dynamique"?

Comment puis-je refacturer la méthode xxx

si je souhaitais éviter d'utiliser la méthode anonyme ici?


2 commentaires

Le truc ici n'est pas la méthode anonyme - c'est la fermeture utilisée. La seule autre façon qui me vient à l'esprit consiste à créer un nouvel objet qui implémente un PropertyName Variable / Propriété ou similaire ainsi qu'un gestionnaire d'événements tinpropertychanged . . ick.


@pst: Merci pour le commentaire. Je suppose que je suis toujours un peu floue sur les internes ici. Lecture CSHARPINDEPTH.COM/Articles/Chapter5/closures.aspx maintenant. =)


3 Réponses :


4
votes

Mettre en œuvre la fermeture implicitement créée par le Lambda explicitement: xxx


1 commentaires

Merci! C'est ce que ma Lambda ci-dessus signifie vraiment en interne? Intéressant. =)



1
votes

Vous pouvez gérer cela en ayant un seul gestionnaire d'événements pour toutes les instances qui utilise un dictionnaire d'instances que vous suivez: xxx

cette version n'a aucune vérification ou retrait d'erreur, mais Cela démontre la technique. Il est particulièrement précieux si vous Écouter pour plusieurs propriétés de la même source . En effet, il ajoute seulement un seul gestionnaire à l'événement de propriété par instance.


1 commentaires

Merci pour votre réponse! En effet, je pourrais écouter plusieurs propriétés de la même source. Il peut y avoir un peu plus de comptabilité impliquée dans cette approche, car je ne veux pas garder les sources d'être déposées en étant référencées dans le dictionnaire, mais cela peut être géré.



0
votes

Je ne suis pas sûr de savoir exactement ce que vous essayez d'atteindre ou pourquoi vous ne voulez pas utiliser des méthodes anonymes, mais vous pouvez faire quelque chose de plus générique: xxx pré>

alors vous pouvez l'utiliser comme si : P>

  source.PropertyChanged += GetHandler                
            (
                p => p.PropertyName == propertyName, MyMagicMethod
            ); 


2 commentaires

Mes collègues ne sont pas à l'aise avec des méthodes anonymes, alors j'essaie de les éviter autant que possible.


Techniquement, une propriétéChangeDeventHandler est un délégué destiné spécifiquement à écouter des événements qui propagent de la propriétéChangeDeventargs, donc à tout moment, vous utilisez un événement fortement typé comme pour éviter l'utilisation d'une méthode anonyme, à condition que vous puissiez juste passer dans un groupe de méthodes, qui est Une fonction (moins de parenthèses, BC vous n'apprenez-vous pas immédiatement) que vous souhaitez appeler lorsque l'événement incendie. Je ne dirais pas qu'il est nécessaire de créer une classe entièrement nouvelle qui encapsule l'écoute des événements - c'est ce que fait un événementHandler déjà.