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 :

Appeler la méthode surchargée automatiquement


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 12
    Par défaut Appeler la méthode surchargée automatiquement
    Bonjour,

    Je ne suis qu'un pauvre programmeur de niveau intermédiaire et je me pose la question suivante :

    Il me semble qu'il n'est pas possible de faire en sorte qu'une surcharge fasse appel à la méthode de base AUTOMATIQUEMENT.

    Je m'explique. Soit le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class Mere {
    	public virtual void methode() {
    		// Traitement de base
    	}
    }
     
    public class Fille : Mere {
    	public override void methode(){
    		// Traitement spécifique
    	}
    }
    Avec ce code, si j'appelle Fille.methode(), le traitement spécifique est exécuté mais pas le traitement de base car la surcharge remplace complètement Mere.methode().

    Bien entendu, je peux écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Fille : Mere {
    	public override void methode(){
    		// Traitement spécifique
    		base.methode();
    	}
    }
    Ainsi, le traitement de base sera bien exécuté. Mais si l'utilisateur de ma classe Fille OUBLIE l'appel à base()...

    D'où mon interrogation : est-il possible de mettre en place un système tel que l'utilisateur n'ait pas à se poser de question; que l'appel à base soit systématique et transparent...

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Il me semble qu'il n'est pas possible de faire en sorte qu'une surcharge fasse appel à la méthode de base AUTOMATIQUEMENT.
    Effectivement, mais tu peux procéder en prenant le problème dans l'autre sens. C'est la classe de base qui force l'appel.

    Par exemple
    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
    23
    public class Mere 
    {
        public void Methode() 
        {
            // Traitement de base
            ...
            // Traitement spécifique
            MethodeSpecifique();
        }
     
        protected virtual void MethodeSpecifique() 
        {
            // Traitement spécifique pour la classe de base
        }
    }
     
    public class Fille : Mere 
    {
        protected override void MethodeSpecifique()
        {
            // Traitement spécifique
        }
    }
    Si la classe de base n'est jamais instanciée directement (on instancie seulement les classes dérivées), tu fais
    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
    public abstract class Mere 
    {
        public void Methode() 
        {
            // Traitement de base
            ...
            // Traitement spécifique
            MethodeSpecifique();
        }
     
        protected abstract void MethodeSpecifique();
    }
     
    public class Fille : Mere 
    {
        protected override void MethodeSpecifique()
        {
            // Traitement spécifique
        }
    }

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 12
    Par défaut
    Bravo !

    Je pense que j'avais perdu de vue que c'est bien la méthode spécifique de classe fille qui sera appelée même s'il est fait depuis la classe mère... (si mon instance est de type Fille bien entendu)

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/11/2014, 14h46
  2. Réponses: 0
    Dernier message: 12/02/2010, 17h32
  3. Réponses: 3
    Dernier message: 25/06/2008, 14h38
  4. Réponses: 4
    Dernier message: 05/02/2007, 14h40
  5. [Débutant] Héritage & appel de méthodes
    Par KooX dans le forum Langage
    Réponses: 4
    Dernier message: 11/05/2004, 23h37

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