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
Libérer: 2024-12-28 05:00:10
original
113 Les gens l'ont consulté

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");
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal