162 votes

Ce qui est délégué ?

Je suis confus que ce qui est le véritable rôle d’un délégué ? J’ai m’a posé cette question plusieurs fois dans mes interviews, mais je ne pense pas que les intervieweurs ont été satisfaits de ma réponse.

Quelqu'un peut-il me dire la meilleure définition, en une seule phrase, avec un exemple concret ?

Merci

184voto

dcp Points 26928

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 la 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:

public static double CalcTotalMethod1(double amt)
{
    return amt * .014;
}

public static double CalcTotalMethod2(double amt)
{
    return amt * .056 + 42.43;
}

Nous pourrions déclarer un délégué signature comme ceci:

public delegate double calcTotalDelegate(double amt);

Et puis nous avons pu déclarer une méthode qui prend le délégué en tant que paramètre comme ceci:

public static double CalcMyTotal(double amt, calcTotalDelegate calcTotal)
{
    return calcTotal(amt);
}

Et que l'on pourrait appeler l' CalcMyTotal méthode passage en le délégué de la méthode que nous voulions utiliser.

    double tot1 = CalcMyTotal(100.34, CalcTotalMethod1);
    double tot2 = CalcMyTotal(100.34, CalcTotalMethod2);
    Console.WriteLine(tot1);
    Console.WriteLine(tot2);

21voto

Mladen Prajdic Points 10337

un délégué est simplement un pointeur de fonction.
autrement dit, vous assignez la méthode que vous souhaitez exécuter votre délégué. puis, plus tard dans le code, vous pouvez appeler cette méthode via Invoke.

un code pour démontrer (écrit ceci de mémoire donc syntaxe peut être éteint)

19voto

Anthony Forloney Points 30083

Prises à partir d'ici

Q Quels sont les délégués?
A Quand un objet reçoit une demande, l'objet peut prendre en charge la demande elle-même ou de transmettre la demande à un deuxième objet de faire le travail. Si l'objet décide de passer le demande, dites-vous que l'objet a transmis la responsabilité pour le traitement de la demande pour le deuxième objet.

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)

5voto

Asaph Points 56989

Wikipedia a un bon article sur le modèle de délégation avec des exemples simples et complexes en java et php.

4voto

Pensez à délégué comme sur une implémentation simplifiée du modèle de commande.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X