Qu'est-ce que Délégué?
Je suis confus que ce qui est le véritable rôle d'un délégué?
J'ai été demandé à cette question à plusieurs reprises dans mes entretiens, mais je ne pense pas que les enquêteurs ont été satisfait de ma réponse.
Quelqu'un peut me dire la meilleure définition, en une phrase, avec un exemple concret?
- par curiosité, qu'avez-vous à répondre, de sorte que nous pouvons vous dire comment vous pouvez la corriger?
- Je trouve intéressant que cette question a été fermé, mais a 126 upvotes et 65 personnes marqué comme favori. Semble que même si elle est trop large c'est encore une très bonne question.
Vous devez vous connecter pour publier un commentaire.
J'aime à penser qu'un délégué comme "un pointeur vers une fonction". Cela remonte à C jours, mais l'idée tient toujours.
L'idée est que vous devez être en mesure d'invoquer un morceau de code, mais ce morceau de code que vous allez invoquer n'est pas connue jusqu'à ce que l'exécution. Si vous utilisez un "délégué" à cette fin. Les délégués venir dans maniable pour des choses comme les gestionnaires d'événements, et ce, où que vous faire des choses différentes en fonction de différents événements, par exemple.
Voici une référence pour C#, vous pouvez regarder:
En C#, par exemple, nous allons dire que nous avions un calcul que nous voulions faire et nous voulions utiliser une autre méthode de calcul qui nous ne savons pas jusqu'à ce que l'exécution. Donc, nous pourrions avoir un couple de méthodes de calcul comme ceci:
Nous pourrions déclarer un délégué signature comme ceci:
Et puis nous avons pu déclarer une méthode qui prend le délégué en tant que paramètre comme ceci:
Et que l'on pourrait appeler la
CalcMyTotal
méthode passage en le délégué de la méthode que nous voulions utiliser.Foo
à un délégué d'appelthis.Foo()
plutôt que d'une fonction statique comme un pointeur de fonction serait de le faire ( en C, vous avez souvent un supplément devoid*
paramètre à passerthis
pour le pointeur de fonction )un délégué est simplement un pointeur de fonction.
pour faire simple vous attribuer la méthode que vous souhaitez exécuter votre délégué.
puis plus tard dans le code, vous pouvez appeler la méthode via Invoquer.
un peu de code pour démontrer (écrit ceci à partir de la mémoire si la syntaxe est peut-être éteint)
Prises à partir d'ici
Ou, comme un simple pseudo exemple: quelque chose envoie une demande à l'objet1. objet1 transmet ensuite la demande et à l'objet2 -- le délégué. objet2 traite la demande et fait un peu de travail. (note: le lien ci-dessus, qui donne de bons exemples)
Penser à déléguer à propos d'une mise en oeuvre simplifiée du modèle de Commande.
Un délégué est un objet qui peut se référer à une méthode. Ainsi, lorsque nous créons un délégué, nous créons un objet qui peut contenir une référence à une méthode. En outre, la méthode peut être appelée par le biais de cette référence. Ainsi, un délégué peut invoquer la méthode à laquelle il se réfère.
Le principal avantage d'un délégué, c'est qu'il nous permet de spécifier un appel à une méthode, mais la méthode appelée en fait est déterminé au moment de l'exécution, et non pas au moment de la compilation.
Simple Délégué
http://knowpacific.wordpress.com/2012/01/26/delegate/
Ici, je vais vous expliquer les délégués, multidiffusion des délégués et de leur utilisation..
Déléguer est un type qui tient la ou les méthode(s) de référence à un objet. Il est également considéré comme un type sûr de pointeur de fonction. On peut dire qu'un délégué est un type qui définit une signature de la méthode.
Lorsque vous instanciez un délégué, vous pouvez associer son exemple avec la méthode, avec une signature compatible. Vous pouvez appeler la méthode à travers l'instance de délégué.
Les délégués sont utilisés pour passer des méthodes comme arguments à d'autres méthodes.
Les gestionnaires d'événements sont rien de plus que les méthodes qui sont appelées par l'intermédiaire de délégués.
Avantages de l'utilisation de délégués,
L'encapsulation de l'application de la méthode d'appel de l'appelant
L'utilisation efficace de déléguer améliore les performances de l'application
Utilisé pour appeler une méthode asynchrone.
Il y a quelques propriétés des délégués sont
public délégué type_of_delegate delegate_name() //Déclaration
L'exemple suivant montre un délégué de l'opération:
Qu'est-ce que Délégué Multicast?
Il est un délégué qui détient la référence de plus d'une méthode. Multidiffusion les délégués ne doit contenir que des méthodes qui retourne void, sinon il y a une exception d'exécution.
Ici Délégué est ajouté à l'aide de l'opérateur += et supprimés à l'aide de l'opérateur -=.
Délégué types sont dérivées de la Délégué de classe dans la .NET Framework. Délégué types sont scellées, elles ne peuvent être dérivées.
Parce que le instancié délégué est un objet, il peut être passé en paramètre, ou affecté à un bien. Cela permet à une méthode d'accepter un délégué en tant que paramètre, et appeler le délégué de quelque temps plus tard. Ceci est connu comme un rappel asynchrone.
Une bonne explication et mise en œuvre pratique du modèle de Délégué peut être trouvé dans Google Collections Transfert Classes (de plus, le Décorateur modèle).
En Cas de communication de l'expéditeur ne sait pas quel est l'objet qui gérera l'événement.
Délégué est le type qui maintiennent la référence de la méthode.
Le délégué a la signature et contient la référence à la méthode qui correspond à sa signature
donc, Délégué est comme sécurisée de type pointeur de fonction.
button1.Click += new System.EventHandler(button1_Click)
Système.Ce gestionnaire est déclaré en tant que délégué ici
Dans .net Événements de travailler sur la notion de Délégué (comme le Bouton de la souris)
Délégué est utilisé lorsque vous ne connaissez pas le code pour appeler au moment de l'exécution
Donc, à l'époque Délégué est utilisé pour gérer les Événements
http://msdn.microsoft.com/en-us/library/ms173171(v=vs. 80).aspx
Un délégué objet
est un objet qu'un autre objet consulte quand il se passe quelque chose dans cet objet. Pour
exemple, votre homme de réparation est à votre délégué, si quelque chose arrive à votre voiture. vous allez à votre homme de réparation et de lui demander de réparer la voiture pour vous (même si certains préfèrent réparer la voiture eux-mêmes, dans ce cas, ils sont leurs propres délégués pour leur voiture).
Un délégué est un objet qui représente un pointeur à une fonction. Cependant, il n'est pas ordinaire pointeur de fonction en ce qu'il:
1) Est Orienté Objet
2) Est de type sécurisé, c'est à dire qu'il ne peut point d'une méthode et vous ne pouvez pas lire le raw adresse de mémoire il pointe vers
3) Est fortement typé. Il ne peut pointer que vers des méthodes qui correspondent à ses signatures.
4) Peut-point de plus qu'une méthode à la fois.
Délégués est principalement utilisé avec les événements.
Le besoin est:
Vous ne souhaitez pas exécuter un morceau de code à la fois lorsque vous exécutez le programme.
Après avoir exécuté le programme que vous souhaitez exécuter ce morceau de code chaque fois qu'un événement se produit.
Exemple :
C'est ce qu'ils disent, vous ne savez pas quelle méthode appeler au moment de la compilation. vous savez qu'à l'exécution qui est en cliquant sur le bouton.
Sans les délégués aucun utilisateur de l'interface de programmation est possible. Parce que vous êtes à l'exécution de code à chaque fois que l'utilisateur fait des événements en cliquant sur le bouton , en tapant dans la zone de texte, la sélection de dropdownlist élément et ainsi de suite....
Un délégué est quelque chose à laquelle une tâche est déléguée à. Le but principal de la délégation est de découpler le code et permettre une plus grande souplesse et à la réutilisation.
Dans la programmation, et plus précisément la programmation orientée objet, cela signifie que lorsqu'une méthode est appelée à faire un peu de travail, il passe le travail sur la méthode d'un autre objet qu'il a une référence à l'. La référence peut pointer vers n'importe quel objet que l'on souhaite, tant que l'objet est conforme à un ensemble prédéfini de méthodes. Nous l'appelons "la programmation d'une interface" (par rapport à la programmation d'une classe concrète de mise en œuvre). Une interface est essentiellement un modèle générique et n'a pas de mise en œuvre; elle signifie simplement une recette, un ensemble de méthodes, les préconditions et les postconditions (les règles).
Exemple Simple:
Maintenant, vous voyez que je peux utiliser quel que soit mise en œuvre que je veux à tout moment sans changer le code dans SomeCaller parce que le type qui
doIt()
est passé n'est pas en béton mais plutôt abstraite, puisque c'est une interface. Dans le monde Java, ce qui est souvent exprimé dans le paradigme du service où vous appel à un service (un objet de la publicité elle-même comme un service via une interface spécifique) et le service d'appels à des délégués pour l'aider à faire son travail. Le service méthodes sont nommés en tant que gros grains de tâches (makePayment(), createNewUser(), etc.), alors qu'intérieurement il fait beaucoup si nitty-gritty de travail par délégation, avec les délégués types d'interfaces au lieu de le des implémentations concrètes.(N. B.: Comment une œuvre est affectée est au-delà de la portée de ce fil. De recherche de l'inversion de contrôle et l'injection de dépendance.)
Bien que pas vraiment un "pointeur de fonction", un délégué peut ressembler c'est un langage dynamique comme PHP:
ou en JavaScript, vous pourriez faire quelque chose comme: