C # a des délégués à cet effet. Ils sont très utilisés avec les événements , car un événement peut appeler automatiquement un certain nombre de délégués attachés (gestionnaires d'événements).
en fait, un rappel est un pointeur vers un code exécutable qui est passé comme argument à un autre code ... la page a besoin d'un examen
Gianluca Ghettini
8
@G_G: Il n'y a rien qui dit que ce doit être un pointeur. C'est généralement parce que le segment de données n'est pas exécutable, mais c'est techniquement un détail d'implémentation.
Joey le
Joey: tu as raison, c'est un détail d'implémentation mais même le rappel est un détail d'implémentation. Vous pouvez réécrire votre code sans utiliser un seul rappel. C'est comme «while» vs «for».
Gianluca Ghettini
1053
Je viens de vous rencontrer,
et c'est fou,
mais voici mon numéro (délégué),
donc si quelque chose se passe (événement),
appelez-moi, peut-être (rappel)?
Explication totalement cool. J'utiliserai cette explication chaque fois que quelqu'un me le demandera, j'espère que je pourrai obtenir le droit de l'utiliser?
Nikola Davidovic
15
+1: J'adore. Cela ruine la chanson, mais cela devrait se lire `` Mais voici mon numéro et les instructions pour utiliser un type de téléphone spécifique (délégué) ''
Gone Coding
8
Apprenez le délégué avec le sourire sur votre visage :-)
Aakash
8
Meilleure explication jamais!
zhengtonic
3
Notez que l'enseignement délégué à d'autres personnes avec cette explication ne fonctionne qu'avec une bonne chorégraphie :)
Sébastien Sevrin
87
Un rappel est une fonction qui sera appelée lorsqu'un processus a terminé l'exécution d'une tâche spécifique.
L'utilisation d'un rappel se fait généralement en logique asynchrone.
Pour créer un rappel en C #, vous devez stocker une adresse de fonction dans une variable. Ceci est réalisé en utilisant a delegateou le nouveau lambda semantic Funcor Action.
publicdelegatevoidWorkCompletedCallBack(string result);publicvoidDoWork(WorkCompletedCallBack callback){
callback("Hello world");}publicvoidTest(){WorkCompletedCallBack callback =TestCallBack;// Notice that I am referencing a method without its parameterDoWork(callback);}publicvoidTestCallBack(string result){Console.WriteLine(result);}
Dans aujourd'hui C #, cela pourrait être fait en utilisant lambda comme:
Un rappel est un code exécutable qui est passé en argument à un autre code.
la mise en oeuvre
// Parent can ReadpublicclassParent{publicstringRead(){/*reads here*/};}// Child need InfopublicclassChild{privatestring information;// declare a DelegatedelegatestringGetInfo();// use an instance of the declared DelegatepublicGetInfoGetMeInformation;publicvoidObtainInfo(){// Child will use the Parent capabilities via the Delegate
information =GetMeInformation();}}
Usage
ParentPeter=newParent();ChildJohny=newChild();// Tell Johny from where to obtain infoJohny.GetMeInformation=Peter.Read;Johny.ObtainInfo();// here Johny 'asks' Peter to read
salut @serhio merci pour votre réponse. c'est encore un peu trouble pour moi: où exactement le code est-il passé en argument à un autre code Semble être l'ajout de la méthode Peter.Read au délégué de l'enfant?
BKSpurgeon
1
Le lien @serhio est mort.
Jude
10
Un rappel est un pointeur de fonction que vous passez à une autre fonction. La fonction que vous appelez «rappellera» (exécutera) l'autre fonction lorsqu'elle sera terminée.
Un rappel peut être implémenté en tant que délégué à une méthode, mais vous pouvez également dire que passer un objet qui prend en charge une méthode de rappel sur son interface est un rappel.
Joe le
Array.Sort (arrayObject); appeler obj.CompareTo (anotherObj) sur des éléments de arrayObject est un exemple classique de rappel utilisant Interface (ICompareable) dans .Net.
Ron5504
8
Si vous faites référence aux rappels ASP.Net:
Dans le modèle par défaut des pages Web ASP.NET, l'utilisateur interagit avec une page et clique sur un bouton ou exécute une autre action qui entraîne une publication. La page et ses contrôles sont recréés, le code de la page s'exécute sur le serveur et une nouvelle version de la page est rendue dans le navigateur. Cependant, dans certaines situations, il est utile d'exécuter le code serveur à partir du client sans effectuer de publication. Si le script client de la page conserve certaines informations d'état (par exemple, les valeurs de variables locales), publier la page et en obtenir une nouvelle copie détruit cet état. En outre, les publications de page introduisent une surcharge de traitement qui peut réduire les performances et forcer l'utilisateur à attendre que la page soit traitée et recréée.
Pour éviter de perdre l'état du client et ne pas entraîner la surcharge de traitement d'un aller-retour de serveur, vous pouvez coder une page Web ASP.NET afin qu'elle puisse effectuer des rappels client. Dans un rappel client, une fonction client-script envoie une demande à une page Web ASP.NET. La page Web exécute une version modifiée de son cycle de vie normal. La page est lancée et ses contrôles et autres membres sont créés, puis une méthode spécialement marquée est appelée. La méthode effectue le traitement que vous avez codé, puis renvoie une valeur au navigateur qui peut être lue par une autre fonction de script client. Tout au long de ce processus, la page est en ligne dans le navigateur.
Si vous faites référence à des rappels dans le code:
Les rappels sont souvent délégués aux méthodes qui sont appelées lorsque l'opération spécifique est terminée ou effectue une sous-action. Vous les trouverez souvent dans des opérations asynchrones. C'est un principe de programmation que vous pouvez trouver dans presque tous les langages de codage.
classCallBackExample{publicdelegatevoidMyNumber();publicstaticvoidCallMeBack(){Console.WriteLine("He/She is calling you. Pick your phone!:)");Console.Read();}publicstaticvoidMetYourCrush(MyNumber number){int j;Console.WriteLine("is she/he interested 0/1?:");var i =Console.ReadLine();if(int.TryParse(i,out j)){var interested =(j ==0)?false:true;if(interested)//event{//call his/her number
number();}else{Console.WriteLine("Nothing happened! :(");Console.Read();}}}staticvoidMain(string[] args){MyNumber number =Program.CallMeBack;Console.WriteLine("You have just met your crush and given your number");MetYourCrush(number);Console.Read();Console.Read();}}
Explication du code:
J'ai créé le code pour implémenter l'explication amusante fournie par LightStriker dans l'une des réponses ci-dessus. Nous transmettons le délégué (nombre) à une méthode ( MetYourCrush). Si l'Interested (événement) se produit dans la méthode ( MetYourCrush), il appellera le délégué (numéro) qui détenait la référence de la CallMeBackméthode. Ainsi, la CallMeBackméthode sera appelée. Fondamentalement, nous transmettons un délégué pour appeler la méthode de rappel.
S'il vous plaît laissez-moi savoir si vous avez des questions.
Cela ne répond pas correctement à la question, pourriez-vous expliquer ce que fait votre code, pour décrire le fonctionnement d'un rappel et comment il est implémenté en C #.
Adam
Salut Adam, Merci pour votre réponse. J'ai créé le code pour implémenter l'explication amusante fournie par LightStriker. Nous transmettons le délégué (nombre) à une méthode (MetYourCrush). Si l'Interested (événement) se produit dans la méthode (MetYourCrush), il appellera le délégué (numéro) qui détenait la référence de la méthode CallMeBack. Ainsi, la méthode CallMeBack sera appelée. Fondamentalement, nous transmettons un délégué pour appeler la méthode de rappel. S'il vous plaît laissez-moi savoir si vous avez des questions.
Mani
1
Probablement pas la définition du dictionnaire, mais un rappel fait généralement référence à une fonction, qui est externe à un objet particulier, stockée puis appelée sur un événement spécifique.
Par exemple, lorsqu'un bouton d'interface utilisateur est créé, il stocke une référence à une fonction qui effectue une action. L'action est gérée par une partie différente du code mais lorsque le bouton est enfoncé, le rappel est appelé et cela appelle l'action à effectuer.
C #, plutôt que d'utiliser le terme «rappel», utilise «événements» et «délégués» et vous pouvez en savoir plus sur les délégués ici .
Un rappel vous permet de passer du code exécutable en tant qu'argument à un autre code. En C et C ++, cela est implémenté comme un pointeur de fonction. Dans .NET, vous utiliseriez un délégué pour gérer les pointeurs de fonction.
Quelques utilisations incluent la signalisation d'erreur et le contrôle du fait qu'une fonction agit ou non.
1) à partir de l'appel d'interface utilisateur Onclient, cliquez sur la fonction javascript pour EX: - builpopup(p1,p2,p3...)
var finalfield = p1, p2, p3;
UseCallBack(finalfield, ""); données du client transmises au côté serveur à l'aide de UseCallBack
2) public void RaiseCallbackEvent(string eventArgument) Dans eventArgument nous obtenons les données passées // faisons une opération côté serveur et passons à "callbackResult"
3) GetCallbackResult() // en utilisant cette méthode, les données seront transmises au client (fonction ReceiveServerData ())
callbackResult
4) Récupérez les données côté client:,
ReceiveServerData(text) dans la réponse du serveur de texte, nous obtiendrons.
Les délégués font la même chose que les rappels basés sur l'interface en C ++ (COM les utilise), bien qu'ils soient beaucoup plus simples à utiliser.
Notez que Microsoft a mis des délégués dans son implémentation Java (J ++) mais que Sun ne les aime pas [java.sun.com] donc ne vous attendez pas à les voir dans la version officielle de Java de si tôt. J'ai piraté un préprocesseur pour vous permettre de les utiliser en C ++, alors ne vous sentez pas exclu si vous ne programmez pas en C # ou sur la plate-forme .NET (c'est-à-dire en C ++ managé ou Visual Basic.NET).
Si vous avez l'habitude de faire fonctionner des pointeurs en C, un délégué est essentiellement une paire de pointeurs réunis en un:
Un pointeur vers un objet (facultatif)
Un pointeur vers une méthode de cet objet
Cela signifie qu'un seul délégué transmet toutes les informations nécessaires pour localiser une fonction dans votre programme, qu'il s'agisse d'une méthode statique ou associée à un objet.
Vous les définissez comme ceci en C #:
publicdelegatevoidFooCallbackType(int a,int b,int c );
Lorsque vous souhaitez les utiliser, vous rendez délégué la fonction que vous souhaitez appeler:
classCMyClass{publicvoidFunctionToCall(int a,int b,int c ){// This is the callback}publicvoidFoo(){FooCallbackType myDelegate =newFooCallbackType(this.FunctionToCall);// Now you can pass that to the function// that needs to call you back.}}
Si vous voulez qu'un délégué pointe vers une méthode statique, cela a la même apparence:
classCMyClassWithStaticCallback{publicstaticvoidStaticFunctionToCall(int a,int b,int c ){// This is the callback}publicstaticvoidFoo(){FooCallbackType myDelegate =newFooCallbackType(CMyClass.StaticFunctionToCall);}}
Dans l'ensemble, ils font la même chose que les rappels basés sur l'interface en C ++, mais causent un peu moins de problèmes car vous n'avez pas à vous soucier de nommer vos fonctions ou de créer des objets d'assistance, et vous pouvez créer des délégués à partir de n'importe quelle méthode. Ils sont plus flexibles.
Réponses:
C # a des délégués à cet effet. Ils sont très utilisés avec les événements , car un événement peut appeler automatiquement un certain nombre de délégués attachés (gestionnaires d'événements).
la source
Je viens de vous rencontrer,
et c'est fou,
mais voici mon numéro (délégué),
donc si quelque chose se passe (événement),
appelez-moi, peut-être (rappel)?
la source
Un rappel est une fonction qui sera appelée lorsqu'un processus a terminé l'exécution d'une tâche spécifique.
L'utilisation d'un rappel se fait généralement en logique asynchrone.
Pour créer un rappel en C #, vous devez stocker une adresse de fonction dans une variable. Ceci est réalisé en utilisant a
delegate
ou le nouveau lambda semanticFunc
orAction
.Dans aujourd'hui C #, cela pourrait être fait en utilisant lambda comme:
la source
Définition
la mise en oeuvre
Usage
Liens
la source
Un rappel est un pointeur de fonction que vous passez à une autre fonction. La fonction que vous appelez «rappellera» (exécutera) l'autre fonction lorsqu'elle sera terminée.
Consultez ce lien.
la source
Si vous faites référence aux rappels ASP.Net:
Source: http://msdn.microsoft.com/en-us/library/ms178208.aspx
Si vous faites référence à des rappels dans le code:
Les rappels sont souvent délégués aux méthodes qui sont appelées lorsque l'opération spécifique est terminée ou effectue une sous-action. Vous les trouverez souvent dans des opérations asynchrones. C'est un principe de programmation que vous pouvez trouver dans presque tous les langages de codage.
Plus d'informations ici: http://msdn.microsoft.com/en-us/library/ms173172.aspx
la source
Dédicace à LightStriker:
exemple de code:
Explication du code:
J'ai créé le code pour implémenter l'explication amusante fournie par LightStriker dans l'une des réponses ci-dessus. Nous transmettons le délégué (nombre) à une méthode (
MetYourCrush
). Si l'Interested (événement) se produit dans la méthode (MetYourCrush
), il appellera le délégué (numéro) qui détenait la référence de laCallMeBack
méthode. Ainsi, laCallMeBack
méthode sera appelée. Fondamentalement, nous transmettons un délégué pour appeler la méthode de rappel.S'il vous plaît laissez-moi savoir si vous avez des questions.
la source
Probablement pas la définition du dictionnaire, mais un rappel fait généralement référence à une fonction, qui est externe à un objet particulier, stockée puis appelée sur un événement spécifique.
Par exemple, lorsqu'un bouton d'interface utilisateur est créé, il stocke une référence à une fonction qui effectue une action. L'action est gérée par une partie différente du code mais lorsque le bouton est enfoncé, le rappel est appelé et cela appelle l'action à effectuer.
C #, plutôt que d'utiliser le terme «rappel», utilise «événements» et «délégués» et vous pouvez en savoir plus sur les délégués ici .
la source
Un rappel vous permet de passer du code exécutable en tant qu'argument à un autre code. En C et C ++, cela est implémenté comme un pointeur de fonction. Dans .NET, vous utiliseriez un délégué pour gérer les pointeurs de fonction.
Quelques utilisations incluent la signalisation d'erreur et le contrôle du fait qu'une fonction agit ou non.
Wikipédia
la source
étapes de travail de rappel:
1) nous devons implémenter l'
ICallbackEventHandler
interface2) Enregistrez le script client:
1) à partir de l'appel d'interface utilisateur Onclient, cliquez sur la fonction javascript pour EX: -
builpopup(p1,p2,p3...)
var finalfield = p1, p2, p3;
UseCallBack(finalfield, "");
données du client transmises au côté serveur à l'aide de UseCallBack2)
public void RaiseCallbackEvent(string eventArgument)
Dans eventArgument nous obtenons les données passées // faisons une opération côté serveur et passons à "callbackResult"3)
GetCallbackResult()
// en utilisant cette méthode, les données seront transmises au client (fonction ReceiveServerData ())callbackResult
4) Récupérez les données côté client:,
ReceiveServerData(text)
dans la réponse du serveur de texte, nous obtiendrons.la source
Les délégués font la même chose que les rappels basés sur l'interface en C ++ (COM les utilise), bien qu'ils soient beaucoup plus simples à utiliser.
Notez que Microsoft a mis des délégués dans son implémentation Java (J ++) mais que Sun ne les aime pas [java.sun.com] donc ne vous attendez pas à les voir dans la version officielle de Java de si tôt. J'ai piraté un préprocesseur pour vous permettre de les utiliser en C ++, alors ne vous sentez pas exclu si vous ne programmez pas en C # ou sur la plate-forme .NET (c'est-à-dire en C ++ managé ou Visual Basic.NET).
Si vous avez l'habitude de faire fonctionner des pointeurs en C, un délégué est essentiellement une paire de pointeurs réunis en un:
Cela signifie qu'un seul délégué transmet toutes les informations nécessaires pour localiser une fonction dans votre programme, qu'il s'agisse d'une méthode statique ou associée à un objet.
Vous les définissez comme ceci en C #:
Lorsque vous souhaitez les utiliser, vous rendez délégué la fonction que vous souhaitez appeler:
Si vous voulez qu'un délégué pointe vers une méthode statique, cela a la même apparence:
Dans l'ensemble, ils font la même chose que les rappels basés sur l'interface en C ++, mais causent un peu moins de problèmes car vous n'avez pas à vous soucier de nommer vos fonctions ou de créer des objets d'assistance, et vous pouvez créer des délégués à partir de n'importe quelle méthode. Ils sont plus flexibles.
la source