IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Delegates. Peux t'on s'en passer ?


Sujet :

C#

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 254
    Par défaut Delegates. Peux t'on s'en passer ?
    Bonjour,

    J'ai apprit l'orienté objet à partir de cours théoriques et pratiques en Java. Ce n'est qu'une fois Visual Studio 2003 sortit que je suis passé en C#. Cela à pour conséquence que je n'ai jamais vraiment comprit le fonctionnement des delagates bien que je sache les utiliser.

    Dernièrement (tout est relatif) je suis tombé sur cette page http://java.sun.com/docs/white/delegates.html ou sun s'explique sur le sujet.

    Si Java est capable de se passer des delagates en est il autant pour le C# ? Pourrions nous imaginer écrire nos propres events sans écrire un seul delegate ?

    Merci.

    Stackoverflow: http://stackoverflow.com/questions/1...ting-delegates

  2. #2
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Le document que tu montres est intéressant

    Mais java et C# sont bien plus que des langages, du moins dans leur utilisation professionnelle : plus que leur syntaxe, c'est le framework qui les accompagne qui fait leur richesse. A moins d'avoir un sacré investissement et des besoins qui le justifient, on n'a aucune raison de développer un système d'accès aux bases de données qui n'utilise pas ADO ; on ne fait pas d'interface sans se baser sur WinForms ou WPF ; on ne fait pas de distribué sans remoting / WCF, etc.
    Pour en revenir à ce que tu dis, on peut bien sûr coder en C# en se passant des delegates. Mais ce n'est pas la voie que Microsoft a pris. Je ne sais pas sur quelles bases sont partis les grandes librairies largement utilisées (Hibernate, logmachin, etc...), et je considère que nous, utilisateurs de C# pour des applis d'entreprise / des petits projets persos, avons tout intérêt à nous baser sur ces gros modules plutôt que réinventer la poudre, ce qui signifie se plier à leurs conventions et à leurs manies.

    Les WinForms ont basé leur système d'événements sur les delegate ? Bah je fais du delegate. Celui qui récupèrera mon projet à mon départ me remerciera de pas avoir implémenté une solution perso qui sera évidemment moins documentée que la solution fournie, soutenue, débuguée et maintenue par un gros machin comme MS ou par une grosse communauté Open Source.

    Un peu fouilli mon pavé mais bon

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Dans l'absolu, oui on pourrait s'en passer, mais est ce que ca a un reel interet ? Les delegates apporte une vision et une manipulation standard et encadré de tout ce qui touche au callback et aux pointeurs de fonctions.

    Un delegate reste conceptuellement simple (du moins pour quelqu'un qui a deja entendu parler de pointeur de fonction) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public abstract class Delegate : ICloneable, ISerializable
    {
        // Fields
        internal IntPtr _methodPtr;
        internal object _target;
    //...
    }
    Un objet et une adresse de methode, rien de bien revolutionnaire. Mais par contre, le fait que les types délégués soit profondemment enraciné dans C# (et au dela dans .Net) apporte de reels facilités (par exemple, faire de l'invocation asynchrone de délégué ne prend dans l'absolu qu'une ligne).

    Donc oui, on pourrait s'en passer (tout comme on pourrait ne pas avoir d'alias (int, bool) vers les structure sous-jacente (Int32, Bool)) mais je ne vois pas vraiment l'interet. Ca apporte certes une chose en plus à apprendre (et je concede que les délégués sont un gros morceaux quand on apprend C#), mais en meme temps, c'est le probleme de tous les langages haut niveaux qui gere pas mal de choses à ta place, mais encore fait il savoir le lui dire.

  4. #4
    Membre éclairé
    Inscrit en
    Septembre 2007
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 254
    Par défaut
    Que ce soit clair je ne compte pas me passer des delegates. Je m'intéresse plus à la forme et à la prouesse technique. Quel serait la syntaxe d'un event sans les delegates en C#.

    Citation Envoyé par SirJulio Voir le message
    Un delegate reste conceptuellement simple (du moins pour quelqu'un qui a deja entendu parler de pointeur de fonction) :
    Heureusement pour moi j'ai aussi fait du C avant de faire du Java et du C#.

  5. #5
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par DranDane Voir le message
    Que ce soit clair je ne compte pas me passer des delegates. Je m'intéresse plus à la forme et à la prouesse technique. Quel serait la syntaxe d'un event sans les delegates en C#.
    Le mot clé event, en C#, caractérise les propriétés des objets de type "delegate", justement. Donc dans des classes à nous on peut simuler le comportement en évitant ces mots-clé et en passant par des classes / des interfaces (par exemple, une ArrayList peut être triée en lui filant un IComparer), nested si on se la joue java-like mais étant donné que la majorité de notre code (ça dépend des projets mais bon) se plugge sur des librairies externes, j'en reviens à ce que je disais ci-dessus

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Imaginons un monde C# sans délégué, on utiliserait les bonnes vieilles recettes du GoF pour reimplementer un equivalent (exemple).

    Pas vraiment genant en theorie, mais quand vient la pratique, tu vas te retrouver avec quinze interfaces pour typer tes listeners. L'objectif sous-jacent des events (event qui n'est que du sucre syntaxique pour designer un delegate particlier (pas levable hors de la classe)) est justement d'encapsuler tout ce pattern dans un machin standard et pratique.

  7. #7
    Membre émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Par défaut
    Citation Envoyé par SirJulio Voir le message
    Imaginons un monde C# sans délégué, on utiliserait les bonnes vieilles recettes du GoF pour reimplementer un equivalent (exemple).
    Vive les délégués, c'est aussi très utile pour réaliser des callBack

Discussions similaires

  1. Réponses: 0
    Dernier message: 14/12/2012, 14h10
  2. comment je peux passer un parametre a une sous requete
    Par boulhous dans le forum Requêtes
    Réponses: 5
    Dernier message: 20/01/2010, 11h10
  3. Passer une fonction en paramètre, sans delegate
    Par deejay2221 dans le forum C#
    Réponses: 8
    Dernier message: 26/03/2009, 20h22
  4. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 16h20
  5. Je ne peux établir une connexion cliente sous Linux.
    Par Anonymous dans le forum CORBA
    Réponses: 5
    Dernier message: 16/04/2002, 15h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo