Maison >développement back-end >C++ >Comment pouvons-nous créer une méthode générique « FromEvent » pour gérer les événements de tout type et liste de paramètres en C# ?

Comment pouvons-nous créer une méthode générique « FromEvent » pour gérer les événements de tout type et liste de paramètres en C# ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-28 05:00:10118parcourir

How Can We Create a Generic `FromEvent` Method for Handling Events of Any Type and Parameter List in C#?

Méthode FromEvent à usage général sans spécifier le type de délégué

Énoncé du problème :

Actuellement, la création d'une tâche basée sur un événement nécessite de définir une méthode FromEvent personnalisée pour chaque événement de chaque classe. Cela peut devenir fastidieux et répétitif. L'objectif est de développer une méthode FromEvent à usage général capable de gérer n'importe quel événement sur n'importe quel objet.

Défis :

Les principaux défis rencontrés sont :

  • Passer l'événement sous forme de chaîne (par exemple, "OnCompletion") dans le code génère une erreur car l'événement n'est accessible que sur le côté gauche des opérateurs = ou -=.
  • Le délégué de l'événement est inconnu au moment de l'exécution et doit varier.
  • Émettre IL pour définir dynamiquement le résultat de TaskCompletionSource.

Solution :

Une solution complète implique :

  1. Création de DynamicMethod : Créez une DynamicMethod pour chaque type de délégué rencontré. Cette méthode appelle dynamiquement la méthode SetResult d'une classe TaskCompletionSourceHolder, qui à son tour définit le résultat de la tâche.
  2. Reflection : Utilisez la réflexion pour récupérer la propriété EventHandlerType de l'événement et créer un délégué à partir de la DynamicMethod émise.
  3. Remplacement du type générique : Utilisez la méthode d'extension TaskFromEvent au lieu de spécifier manuellement le type de délégué (par exemple, TaskFromEvent), comme indiqué dans le code suivant :
object[] result = await obj.FromEvent("Event Name");

Cette méthode prend en charge les événements avec n'importe quel type de retour. et liste de paramètres. Il élimine le besoin de code passe-partout et permet une gestion transparente et réutilisable des événements provenant de divers objets.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn