Le terme rappel dans le contexte des délégués signifie-t-il: " un délégué déléguant qu'elle travaille à un autre délégué contenue pour terminer une tâche em>"? Exemple: ( Veuillez fournir des exemples si nécessaire. P> p>
4 Réponses :
Un rappel est essentiellement un délégué adopté dans une procédure que cette procédure "rappellera" à un point approprié. Par exemple, dans des appels asynchrones tels que WebRequest.begingeSePonse ou une opération de WCF Begkexxx, vous passeriez un asynccallback. Le travailleur "rappellera" quelle que soit la méthode que vous passez en tant que asynccallback, dans ce cas où il est fini de vous faire savoir qu'il est fini et d'obtenir le résultat. P>
Un gestionnaire d'événements pourrait être considéré comme un autre exemple. Par exemple, lorsque vous attachez un gestionnaire à un événement de clic, le bouton "rappellera" sur ce gestionnaire lorsque le clic se produit. P>
Un rappel est ce que le délégué exécute quand il est invoqué. Par exemple, lors de l'utilisation du motif asynchrone à l'aide de délégués, vous feriez quelque chose comme ceci: Onmesagereceived code> est le rappel, le code exécuté en invoquant le délégué . Voir Cet article Wikipedia Pour plus d'informations, ou Google quelques exemples supplémentaires. p> p>
Votre exemple est un bon début, mais c'est incorrect. Vous ne faites pas de nouveau délégué dans la méthode, il est utilisé dans la Déclaration d'un événement dans la classe. Voir cet exemple modifié de votre code:
namespace Test { //In this case, this delegate declaration is like specifying a specific kind of function that must be used with events. public delegate string CallbackDemo(string str); class Program { public static event CallbackDemo OnFoobared; static void Main(string[] args) { //this means that StrAnother is "subscribing" to the event, in other words it gets called when the event is fired OnFoobared += StrAnother; string substr = Strfunc(); Console.WriteLine(substr); Console.ReadKey(true); //this is the other use of delegates, in this case they are being used as an "anonymous function". //This one takes no parameters and returns void, and it's equivalent to the function declaration //'void myMethod() { Console.WriteLine("another use of a delegate"); }' Action myCode = delegate { Console.WriteLine("another use of a delegate"); }; myCode(); Console.ReadKey(true); //the previous 4 lines are equivalent to the following however this is generally what you should use if you can //its called a lambda expression but it's basically a way to toss arbitrary code around //read more at http://www.developer.com/net/csharp/article.php/3598381/The-New-Lambda-Expressions-Feature-in-C-30.htm or //http://stackoverflow.com/questions/167343/c-lambda-expression-why-should-i-use-this Action myCode2 = () => Console.WriteLine("a lambda expression"); myCode2(); Console.ReadKey(true); } static string Strfunc() { return OnFoobared("a use of a delegate (with an event)"); } static string StrAnother(string str) { return str.Substring(1, 3).ToString(); } } }
Ceci sera voté précisément pour la raison pour laquelle il est correct. C # ne met pas en œuvre les délégués, ce que les implements informés sont le transfert d'appel. Cette utilisation incorrecte de la nomenclature est probablement le plus gros problème avec C # à cet égard. P>
Le papier ACM ci-dessous est la première description de ce qui serait ultérieurement appelé un délégué. Fondamentalement, un délégué est quelque chose qui semble être une instance d'un objet (comment elle est réellement mise en œuvre est hors de propos). Cela signifie que vous pouvez appeler des méthodes, accéder à des propriétés, etc. du délégué. P>
http://web.media.mit.edu /~lieber/lieberary/oop/odélégation/délégation.html p>
Qu'est-ce que C # Implements est des rappels ou un transfert d'appel (tous dépendant de la manière dont vous les utilisez). Ce ne sont pas des délégués. Pour être un délégué, il est capable d'accéder à l'objet comme s'il s'agissait de l'objet lui-même. P>
Lorsqu'un stylo déléguette un message de dessin à un stylo prototypique, il dit "Je ne sais pas comment gérer le message du dessin. J'aimerais que vous répondiez à cela pour moi si vous le pouvez, mais si vous avez d'autres questions, comme quelle est la valeur de ma variable x ou besoin de quelque chose de fait, vous devriez revenir à moi et demander. " Si le message est délégué plus loin, toutes les questions sur les valeurs des variables ou des demandes de réponse aux messages sont tous déduites à l'objet qui déléguait le message en premier lieu. - Henry Lieberman P> blockQuote>
Alors, comment a-t-il été gâché? Pour être honnête, je ne sais pas. Je sais que j'utilise des délégués (plus de 16 ans maintenant) bien avant que c # et quels instruments C # ne sont pas des délégués. P>
Une très bonne explication peut être eue ici. P>
IMHO précieux de penser à un délégué en tant que type un pointeur de fonction sur une méthode: comme une interface ou une classe: c'est un modèle pour une instance qui est elle-même une référence à sa méthode interne: l'instance peut être transmise entre les objets et invoqué / exécuté à tout moment. Si vous avez un moyen de faire la maintien de «C # en profondeur», de Jon Skeet et de lire la section Chapitre 2 sur les délégués et du chapitre 5 des délégués, vous comprendrez l'évolution de la "évolution" des délégués de leur "stade larvaire" en C # 1.0, à leur forme entièrement "évoluée" en C # 3.0. Je n'ai jamais trouvé une meilleure exposition