2008-11-14 6 views

Répondre

4

générique, un représentant est un objet utilisé pour accéder à une méthode externe à l'objet propriétaire de la méthode, tandis qu'un rappel est une variable qui contient un délégué

en C#, les termes sont utilisés de manière interchangeable

15

(Je suppose que vous parlez de .NET ici.) Si non, veuillez élaborer.)

Les délégués sont la manière idiomatique d'implémenter des rappels dans .NET - mais vous n'avez pas à le faire. Vous pourriez utiliser une interface, par exemple. (En particulier, vous pourriez avoir un callback avec une méthode pour appeler en erreur, et une en cas de succès Bien sûr, vous pourriez prendre deux délégués à la place ...)

Il y a beaucoup d'utilisations pour les délégués au-delà des rappels. NET - cela dépend exactement de ce que vous considérez comme un rappel, mais les gestionnaires d'événements GUI, les démarreurs de threads, les filtres et les projections (et plus encore!) Dans LINQ to Objects utilisent tous des délégués.

4

Ils sont étroitement liés. Un délégué est la description de la façon dont la fonction de rappel ressemble:

delegate void MyDelegate(string Text); 

Ensuite, vous pouvez avoir une fonction qui peut prendre dans le rappel en tant que paramètre.

//This will result in a MessageBox with "Lalalala" 
MyFunctionThatGetsTheCallbackFunctionRef(MyCallBackFunc); 

void MyFunctionThatGetsTheCallbackFunctionRef(MyDelegate TheFunction){ 
TheFunction("Lalalala"); 
} 

void MyCallBackFunc(string Text){ 
    //my callback 
    MessageBox.Show(Text); 
} 
+10

vous 'Ref' en abrégé le' MyFunctionThatGetsTheCallbackFunctionRef' ... ne voudrais pas que le nom trop long !! – EvilGeniusJamie

31

Un « rappel » est un terme qui fait référence à un modèle de conception de codage, disponible dans toutes les langues qui a des pointeurs de fonction, ou un analogue aux pointeurs de fonction (ce qui est un peu ce délégué est)

Dans ce modèle, vous passez un pointeur sur une fonction à une autre fonction, de sorte que dans la fonction appelée, il peut "rappeler" la fonction que vous lui avez transmise. De cette façon, vous pouvez contrôler une grande partie du comportement interne d'une méthode depuis l'extérieur de la méthode, en passant des pointeurs à différentes fonctions de "callback" à chaque appel ... Un exemple de callback est quand vous avez un algorithme de tri cela doit être passé un pointeur vers une fonction qui va "comparer" toute paire arbitraire d'objets dans la liste à trier, pour déterminer qui précède l'autre. Sur un appel à la méthode de tri, vous pouvez passer une fonction de rappel qui compare par nom d'objet, et une autre fois passer une fonction qui compare par poids d'objet, ou autre ...

Un délégué, otoh, est un spécifique. Type net qui agit comme un conteneur spécifique à la signature pour un pointeur de fonction ... Dans le code managé .Net, les délégués sont le seul moyen de créer et d'utiliser un pointeur de fonction. Donc, dans .Net pour faire un rappel, vous passez en fait un délégué ... Mais les délégués peuvent être utilisés dans d'autres scénarios en plus des rappels. (spécifiquement, les délégués peuvent également être utilisés pour implémenter le multithreading à partir du pool de threads .Net)

Les rappels sont également utilisés pour implémenter le modèle "observateur" (implémenté dans .Net à l'aide d'événements, qui sont eux-mêmes un type spécial de délégué)

Questions connexes