Comment puis-je refacturer la méthode si je souhaitais éviter d'utiliser la méthode anonyme ici? p> p>
3 Réponses :
Mettre en œuvre la fermeture implicitement créée par le Lambda explicitement:
Merci! C'est ce que ma Lambda ci-dessus signifie vraiment en interne? Intéressant. =)
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: 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
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é.
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: alors vous pouvez l'utiliser comme si : P> source.PropertyChanged += GetHandler
(
p => p.PropertyName == propertyName, MyMagicMethod
);
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à.
Le truc ici n'est pas la méthode anonyme - c'est la fermeture i> utilisée. La seule autre façon qui me vient à l'esprit consiste à créer un nouvel objet qui implémente un
PropertyName CODE> Variable / Propriété ou similaire ainsi qu'un gestionnaire d'événements code> tinpropertychanged CODE>. . 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. =)