Rappels en C #
Je veux avoir une bibliothèque qui aura une fonction qui accepte un objet pour ce paramètre.
Avec cet objet, je veux être en mesure d'appeler une fonction spécifiée lorsque X est fini. La fonction qui sera appelée doit être spécifié par l'appelant, et X sera effectué et contrôlé par la bibliothèque.
Comment puis-je faire cela?
Pour référence, je suis à l'aide de C# et de .NET 3.5
source d'informationauteur Malfist
Vous devez vous connecter pour publier un commentaire.
Offre un délégué et d'utiliser un délégué anonyme ou une Expression Lambda
Ou l'utilisation d'une interface
Sonne comme une recette parfaite pour les délégués, en particulier, des rappels avec les délégués sont exactement comment cela est géré dans le modèle asynchrone .NET.
L'appelant généralement de vous passer de l'état et d'un délégué, et que vous stockez les deux d'entre eux quel que soit le contexte que vous avez, puis appeler le délégué de la transmettre à l'état, et quelle que soit la suite que vous pourriez avoir.
Vous pouvez soit faire de l'état juste
object
ou éventuellement utiliser un délégué générique et de prendre de l'etat du type approprié, par exempleAlors:
Que vous utilisez .NET 3.5, vous pourriez vouloir utiliser l'existant
Func<...>
etAction<...>
délégué types, mais vous peut trouver le rend plus clair de déclarer votre propre. (Le nom peut le rendre plus clair ce que vous l'utilisez.)
L'objet en question devront mettre en place une interface fournie par vous. Prendre de l'interface comme un paramètre, puis vous pouvez appeler n'importe quelle méthode que l'interface expose. Sinon, vous n'avez aucun moyen de savoir ce que l'objet est capable de faire. Que, ou vous pouvez prendre un délégué en tant que paramètre et l'appeler.
Est-il une raison de ne pas avoir votre bibliothèque d'un événement public pour être déclenché lorsque l'opération est terminée? Ensuite, l'appelant pouvait juste s'inscrire pour gérer l'événement et vous n'avez pas à vous soucier de passer autour des objets ou des délégués.
L'objet de la mise en œuvre d'une interface que vous avez fournies, mais il semble être plus le Java approche de l' .NET approche. Les événements semblent un peu plus propre pour moi.
Vous pouvez utiliser le Système.Action disponible en C#.NET pour les fonctions de rappel. Veuillez vérifier cet échantillon de exemple: