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 :

Usage du mot clef base et du modifier override


Sujet :

C#

  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Usage du mot clef base et du modifier override
    Bonjour


    Jusqu'ici je n'ai encore jamais du employer le mot clef base ni le modifier override

    A quoi ca sert ? (j'ai encore une fois rien compris a mdsn)

    Par exemple j'ai le bout de code ci-apres, dans un user control pour lequel je voulais bricoler le click event

    1- A quoi sert l'override ?
    2- Pouquoi a la sortie on semble re-executer la fonction : base.OnMouseClick

    Je me suit dit : peut etre que ca sert a intercepter l'event et puis lui rendre la main : un espèce de "pontage" mais comme je ne vois nulle part un autre usage de l'event je ne comprends pas ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
        // *****************************************************************************************
        protected override void OnMouseClick(System.Windows.Forms.MouseEventArgs e)
        {
          switch (this._uiMode)
          {
            case UIMode.Selection:
              if (e.Button == System.Windows.Forms.MouseButtons.Left)
              {
                SelectAt(e.Location);
              }
              break;
            case UIMode.Zoom:
              switch (e.Button)
              {
                case System.Windows.Forms.MouseButtons.Left: ZoomAt(e.Location, _map.Zoom + 1); break;
                case System.Windows.Forms.MouseButtons.Right: ZoomAt(e.Location, _map.Zoom - 1); break;
              }
              break;
          }
     
          base.OnMouseClick(e);
        }

  2. #2
    Rédacteur

    Inscrit en
    Juin 2004
    Messages
    744
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2004
    Messages : 744
    Par défaut
    Il s'agit d'un concept propre à la programmation orienté objet et plus précisement à la notion d'héritage

    Une classe héritante d'une autre contient automatiquement les méthode de la classe parentes (sauf si elle sont définies comme private)

    Par exemple si la classe PARENT possède la méthode CALCULER()
    La classe ENFANT peut également l'appeler.

    le mot clé override permet de surcharger la méthode de la classe PARENT dans la classe ENFANT. en d'autre mot on "casse" l'héritage en remplaçant la méthode.

    Cependant il reste toujours possible de faire appel à la méthode de la classe PARENT grâce au mot clé base.

    base représente l'instance de la classe parente alors que this représente l'instance de la class en cours

    prennons l'exemple suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public override void calculer()
    {
     base.calculer()
     xxxxxxxxxxxxxxxxxxx
    }
    Cette méthode écrase la méthode PARENT mais y fait appel. Pour simplifier elle la "complète"

    J'espère que ces quelques explications on pu t'éclairée.

    Ludovic,
    Envie de contribuer à la rubrique SharePoint ? Contactez moi par MP !

    SharePoint : http://sharepoint.developpez.com
    Mon site : http://lefortludovic.developpez.com
    Mon blog : http://www.consultpoint.net/blog

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Meci Ludovic

    Oui ton explication m'eclaire beaucoup !

    C'est donc bien +/- ce que j'avais intuitivement compris dans mon exemple

    On a "shunté " l'event OnMouseClick

    Maintenant reste a trouver ce que fait le OnMouseClick parent que je n'ai pas trouvé
    Mais comme il s'agit d'un event je soupconne bien la subtilité :

    On exploite l'event mais on rends la main pour pouvoir éventuellement s'en servir ailleurs
    C'est +/- ca ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Attention, OnMouseClick n'est pas un évènement ! c'est la méthode qui déclenche l'évènement MouseClick, c'est à dire qui appelle les handlers définis pour MouseClick (par le designer et/ou en faisant MouseClick += ...)

    Citation Envoyé par olibara Voir le message
    Maintenant reste a trouver ce que fait le OnMouseClick parent que je n'ai pas trouvé
    voilà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    protected virtual void OnMouseClick(MouseEventArgs e)
    {
        MouseEventHandler handler = (MouseEventHandler) base.Events[EventMouseClick];
        if (handler != null)
        {
            handler(this, e);
        }
    }
    Merci Reflector

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci TomLev


    Attention, OnMouseClick n'est pas un évènement ! c'est la méthode qui déclenche l'évènement MouseClick, c'est à dire qui appelle les handlers définis pour MouseClick (par le designer et/ou en faisant MouseClick += ...)
    Heu je ne comprends pas bien ce que tu veux dire ?
    J'aurais dis ca

    Attention, OnMouseClick n'est pas un évènement !
    c'est le handler qui EST APPELLEE par l'évènement MouseClick,

    Mais après je ne vois plus du tout ce que tu veux dire ??
    c'est à dire qui appelle les handlers définis pour MouseClick (par le designer et/ou en faisant MouseClick += ...)

    Dans ma petite tete

    Nous avons un evenement : MouseClick
    On peut definir un handler pour cet evenement : OnMouseClick
    Cet handler appellera des methodes liées a cet evenement (on évitera d'ecrire le code dans le corps du handler)

    Ou alors quelque chose m'echape completement par rapport a ce que tu dis

    Cela etant il y a effectivement quelque chose que je ne comprends pas car dans mon projet je ne trouve AUCUNE autre reference à OnMouseClick
    In n'y a que le handler que j'ai donné en exemple

    C'est sans doute de la génération spontanée ?

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par olibara Voir le message
    Dans ma petite tete

    Nous avons un evenement : MouseClick
    On peut definir un handler pour cet evenement : OnMouseClick
    Cet handler appellera des methodes liées a cet evenement (on évitera d'ecrire le code dans le corps du handler)
    Non, la méthode OnMouseClick n'est pas un handler d'évènement, au contraire : c'est elle qui va appeler les handlers associés à cet évènement. D'ailleurs tu remarqueras que OnMouseClick est une méthode protégée, elle n'est donc accessible que dans une classe héritée de Control. OnMouseClick est appelée par le contrôle en réponse à un message Windows (WM_LBUTTONUP, WM_RBUTTONUP, WM_MBUTTONUP ou WM_XBUTTONUP). D'ailleurs je t'encourage à utiliser Reflector pour voir un peu comment ça se passe...
    Pour associer un handler à un évènement on fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.MouseClick += new MouseEventHandler(UserControl1_MouseClick);
    Ce qui veut dire "ajoute la méthode UserControl1_MouseClick comme handler de l'évènement MouseClick pour this". En général tu n'as pas besoin d'écrire le code ci-dessus car le designer s'en charge.

    Citation Envoyé par olibara Voir le message
    Cela etant il y a effectivement quelque chose que je ne comprends pas car dans mon projet je ne trouve AUCUNE autre reference à OnMouseClick
    In n'y a que le handler que j'ai donné en exemple
    Normal, normalement tu passes par l'évènement MouseClick, comme expliqué au dessus.

  7. #7
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci Tomlev

    J'ai quand meme encore un trou noir

    Sans avoir encore une grande experience dans le domaine j'ai quand meme deja un peu pratiqué les events et les delegate


    Le probleme dans le cas actuel c'est qu'en faisant une recherche sur "Click" a travers tout le projet, je ne trouve NULLE par ce qui pourrait ressembler a un abonnement a l'event click de mon control

    Je ne ne trouve que ce Handler OnMouseClick qui semble tout a fait orphelin mais qui est pourtant bien appelé ??


    D'ailleurs je t'encourage à utiliser Reflector pour voir un peu comment ça se passe...
    La aussi je me sens perdu dans le monde ?
    Ca veux dire quoi ?
    Comment je dois utiliser reflector ?
    C'est un tool ?

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par olibara Voir le message
    Le probleme dans le cas actuel c'est qu'en faisant une recherche sur "Click" a travers tout le projet, je ne trouve NULLE par ce qui pourrait ressembler a un abonnement a l'event click de mon control
    Ben il n'y a peut-être simplement aucun handler défini pour l'évènement click... Sinon, vérifie tes options de recherche (casse, mot entier, texte masqué...)

    Citation Envoyé par olibara Voir le message
    Je ne ne trouve que ce Handler OnMouseClick qui semble tout a fait orphelin mais qui est pourtant bien appelé ??
    Oui, il est appellé par la méthode WmMouseUp de la classe Control. Mais comme cette méthode est privée, tu ne la vois pas...

    Citation Envoyé par olibara Voir le message
    D'ailleurs je t'encourage à utiliser Reflector pour voir un peu comment ça se passe...
    La aussi je me sens perdu dans le monde ?
    Ca veux dire quoi ?
    Comment je dois utiliser reflector ?
    C'est un tool ?
    Oui, un outil qui permet "d'explorer" des assemblies et de les décompiler pour voir le code source.
    Disponible ici : http://www.red-gate.com/products/reflector/
    Depuis que j'ai découvert ça, je ne peux plus m'en passer

  9. #9
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut Tomlev

    J'ai téléchargé reflector, je vais plonger la dedans

    Pour le reste j'entrevois une lueur je commence peut-etre a comprendre

    Oui, il est appellé par la méthode WmMouseUp de la classe Control. Mais comme cette méthode est privée, tu ne la vois pas...
    Si je comprends bien la classe control sur l'event MouseClick appelle une methode WmMouseUp qui elle meme appelle d'office un OnMouseClick que je suis censé avoir défini ?
    Je chauffe ?

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par olibara Voir le message
    Si je comprends bien la classe control sur l'event MouseClick appelle une methode WmMouseUp qui elle meme appelle d'office un OnMouseClick que je suis censé avoir défini ?
    Je chauffe ?
    Non, ce n'est pas WmMouseUp qui est appelé sur l'évènement MouseClick, mais au contraire WmMouseUp va appeler OnMouseClick pour déclencher l'évènement MouseClick. WmMouseUp est appelé par la méthode WndProc (ce qui devrait te rappeler des souvenirs si tu as fait de la prog windows en C/C++...) sur la réception d'un message WM_*BUTTONUP

    Tu n'es pas obligé de définir OnMouseClick, c'est déjà défini dans la classe contrôle. Par contre, si tu veux modifier ou compléter le fonctionnement de cette méthode, tu peux la redéfinir (car elle est virtual, ce qui te permet de faire un override).

Discussions similaires

  1. Modifier les mots-clef
    Par Pharcy dans le forum Visual Studio
    Réponses: 0
    Dernier message: 19/07/2010, 20h55
  2. Réponses: 3
    Dernier message: 08/07/2008, 11h06
  3. Traduction d'une base de données de mot-clefs
    Par is_null dans le forum Requêtes
    Réponses: 4
    Dernier message: 26/12/2006, 13h55
  4. mot clef sql pour nom de champ
    Par bobinou007 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/10/2004, 13h21

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