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

VB.NET Discussion :

EventArgs : quel est son utilité ?


Sujet :

VB.NET

  1. #1
    cma
    cma est déconnecté
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 12
    Points : 11
    Points
    11
    Par défaut EventArgs : quel est son utilité ?
    Bonjour,

    La signature habituel d'un délégué est (ByVal sender As Object, ByVal e As xxxEventArgs). Est-ce simplement une convention ou je me trompe ?
    -> c'est une convention, rien n'empêche d'utiliser 0 à x arguments

    J'utilise les évènements pour faire dialoguer entre-elle les couches de mon application. La couches applicative est abonnée aux couches techniques. Je joue avec des interfaces pour découpler les dépendances. Après je propage les évènements plus ou moins en l'état à la couche présentation. Dans ce cas le sender peu prendre différente forme, Me ou une autre instance, selon les besoins.

    Dans les exemples que j'ai trouvé, e est systématiquement utilisé. Ceci implique de créer autant de classe dérivée que d'évènements. Avec un modèle en couche, cela augmente d'autant le nombre d'interface vu que les évènements... Du coup, je n'utilise jamais ce paramètre. Mais ça me titille..

    Pourquoi utiliser un xxxEventArgs alors que le sender contient déjà toutes les infos et qu'il est possible de les "filtrer" via des interfaces?
    -> c'est utile lorsque les infos à transmettre aux abonnés sortent du cadre de l'émetteur
    Existe-t-il des problèmes potentiels avec la méthode que j'utilise?
    -> ils sont d'ordre philosophique

    Merci pour votre aide

  2. #2
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    Citation Envoyé par cma Voir le message
    Bonjour,
    La signature habituel d'un délégué est (ByVal sender As Object, ByVal e As xxxEventArgs). Est-ce simplement une convention ou je me trompe ?
    J'utilise des tas de Handler avec des signatures différentes de celle-là. Je pense que cette signature est juste tirée d'un constat logique :
    - c'est toujours utile de savoir qui à levée l'event
    - la mise à disposition de donnée non accessibles via le sender peut être nécessaires.

    Citation Envoyé par cma Voir le message
    Dans les exemples que j'ai trouvé, e est systématiquement utilisé. Ceci implique de créer autant de classe dérivée que d'évènements.
    Ca n'a rien d'obligatoire. Exemple --> si l'event n'a d'intérêt que de part sa levée, j'utilise un handler sans aucun paramétre.

    Citation Envoyé par cma Voir le message
    Pourquoi utiliser un xxxEventArgs alors que le sender contient déjà toutes les infos et qu'il est possible de les "filtrer" via des interfaces?
    Existe-t-il des problèmes potentiels avec la méthode que j'utilise?
    Clairement oui, à proscrire. Cela implique que tu dois rendre public (ou friend) toutes les propriétés du sender que tu utilises dans les procédures déléguées. Imaginons que je veuille propager l'event saisie d'un caractére à partir d'une classe gérant un hook clavier. Ta méthode oblige à créer une propriété public "caractéreSaisi" et à l'alimenter avant la levée de l'event sachant que cette propriété ne sert à rien d'autre.

    Illustration à 2 cents :
    Moi et ma femme.
    Méthode 1 avec argument :
    Ma femme : "Je sors chercher le pain" --> event ( sender = ma femme, args = "je sors chercher le pain" )
    Moi : "ok"
    Méthode 2 sans argument :
    Ma femme : "Je sors chercher le pain" --> event ( sender = ma femme)
    Moi : "hein ? T'as dis quoi ? ..."
    Trop tard, je le saurais jamais, elle est déjà partie...

    Citation Envoyé par cma Voir le message
    Je joue avec des interfaces pour découpler les dépendances.
    Avec de bons implements, ça le fera !

    Cdt.
    Bon à savoir : la touche F1 ne sert pas à commander des places pour le grand prix de Belgique.

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Citation Envoyé par cma Voir le message
    La signature habituel d'un délégué est (ByVal sender As Object, ByVal e As xxxEventArgs). Est-ce simplement une convention ou je me trompe ?
    Salut,

    Olsimare a deja repondu, mais je vais juste donner mon avis.

    Rien ne t'oblige techniquement à le faire, mais c'est un cadre admis et conseillé. De plus, dans le cas ou un event n'a d'interet que dans sa levée (le sender et l'arg n'ayant aucune utilité), tu n'es pas obligé de créer un nouveau XXXEventArgs, tu peux garder un EventArgs simple (c'est ce que fait le Fx dans ses events standard sans argument (Click, Load, etc ).

    Dans le cas, ou il y a des infos à passer, cela va dependre de l'info. Par exemple, si la donnée en question est recuperable sur une propriété existante (comprendre qui n'a pas été créé pour l'occasion) du sender, alors tu gardes la sig (Object, EventArgs) car tu pourras caster ton sender et recuperer l'info en question (cas de TextChanged de Control par exemple). A contrario, si la donnée n'est pas exposé explicitement par le sender, alors la oui, il faudra deriver un EventArgs afin qu'il encapsule les données en question (Exemple, toujours sur Control, KeyPressed ou Paint).

    Bref, techniquement, tu es assez libre, mais AMHA, il vaut mieux s'en tenir à ce design. =)

  4. #4
    cma
    cma est déconnecté
    Membre à l'essai
    Inscrit en
    Février 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Un grand merci pour vos réponses.

    Je constate que c'est plus une question philosophique que technique.

    On ne perd rien à implémenter systématiquement la signature "conventionnelle" : les méthodes abonnées sont faciles à identifier, on garde une porte ouverte (est déjà implémentée) si on décide un jour de passer des argument supplémentaire

    olsimare Je crois que tu peux passer une collection hétérogène en paramètre... en tout cas avec ma femme...

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    On peut ajouter aussi que avec l'EventHandler générique, il n'y a normalement pas à créer de signature spécifique, juste hériter la class EventArg et déclarer l'event en utilisant le handler générique. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public event EventHandler<MyEventArgs> MyEvent;
     
    public class MyEventArgs : EventArgs
    {
        public string MyField;
    }

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. quel est l'utilité de Java packFrame ?
    Par j_esti dans le forum Langage
    Réponses: 1
    Dernier message: 11/09/2007, 21h54
  2. où est /usr/local sur mac OSX server (10.4.10) ou quel est son équivalent?
    Par Khaled.Noordin dans le forum Développement OS X
    Réponses: 2
    Dernier message: 08/07/2007, 22h55
  3. Réponses: 4
    Dernier message: 08/05/2006, 18h27
  4. [Débutant(e)] [ClassPath] Quel est son rôle ?
    Par slate dans le forum Général Java
    Réponses: 5
    Dernier message: 06/07/2005, 08h32

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