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 :

Appel de la fonction de base sur heritage


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 17
    Points : 10
    Points
    10
    Par défaut Appel de la fonction de base sur heritage
    j'explique le probleme sous forme de code ca sera plus simple qu'avec des mots :

    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 A
    {
            public virtual void ToInt()
            {
                return 1
            }
    }
    public class B:A
    {
            public override void ToInt()
            {
                return 2;
            }
    }
    public class C:B
    {
            public override void ToInt()
            {
                return ((A)this).ToInt(); // Erreur ici!! ca n'appelle pas le ToInt de A
            }
    }
    je commente un peu, en gros je voudrais appeler la methode de la classe de base A a partir de la classe dérivée C
    est ce que c'est possible etant donné que le code ecrit au dessus appelle le ToInt() de C pas celui de A

    merci d'avance

  2. #2
    Expert éminent
    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 : 46
    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
    Points : 7 660
    Points
    7 660
    Par défaut
    Je doute que tu ais testé le code ci-dessus, car je pense que cela poserait problème à l'exécution. A mon avis la méthode ToInt de la classe C s'appelle elle même, du fait de l'héritage et la pile ne doit pas aimer au final.

    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
    public class A
    {
            public virtual int ToInt()
            {
                return 1;
            }
    }
    public class B:A
    {
            public override int ToInt()
            {
                return 2;
            }
    }
    public class C:B
    {
            public override int ToInt()
            {
                // Appel de la méthode ToInt de la classe parent.
                return base.ToInt();
            }
    }

  3. #3
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Je dirais que tu ne peut pas appeler A.ToInt() à partir de C si B override déjà ToInt ... c'est à ça que ça sert override justement ...

  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
    Points : 39 753
    Points
    39 753
    Par défaut
    A cause du polymorphisme, ton code n'appelle pas A.ToInt mais C.ToInt, ça fait donc une récursivité infinie.

    Comme smyley, je pense pas que ce que tu cherches à faire soit possible... tu peux faire référence à la méthode de classe "mère" avec le mot-clé base, mais pas à celle de la classe "grand-mère". Ou alors, dans B tu définis une méthode qui appelle A.ToInt, et tu appelles cette méthode dans C

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    oki merci c'est exactement ce que je craignais

  6. #6
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Décembre 2008
    Messages : 256
    Points : 311
    Points
    311
    Par défaut
    Le même cas a déjà été traité il y a quelques mois. En gros tu dois revoir ton design et tu as deux possibilités:
    - soit tu te rends compte que la méthode ToInt() de la classe B n'a pas d'utilité, et donc tu ne l'implémentes pas, comme ça C.ToInt() appellera bien A.ToInt()
    - soit C hérite de A et non de B.

Discussions similaires

  1. Fonctions de base sur un arbre binaire
    Par Caidriq dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 23/06/2015, 21h37
  2. appel d'une fonction en cliquant sur un bouton
    Par om_fanatics dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 22/04/2009, 09h56
  3. appel d'une fonction à chaque appui sur une touche du clavier
    Par jonnyboy dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/09/2007, 16h32
  4. appel d'une fonction en cliquant sur un lien
    Par pazaroti dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 17/04/2007, 13h20
  5. Réponses: 2
    Dernier message: 20/08/2004, 17h10

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