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 :

Classe static et héritage


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut Classe static et héritage
    Bonjour à tous,

    J'ai plusieurs classes static qui utilisent à peu près le même code. J'ai donc essayé de factoriser le code. Mon objectif est d'avoir une classe static à la fin.

    En gros il me faudra :

    ClassDeBase

    void Method
    {
    blabla
    SousMethode
    }

    virtual void SousMethod()
    {
    }
    static Class1 : ClassDeBase

    override void SousMethode()
    {
    blabla
    }

    void LanceMethode
    {
    Method()
    }
    Bon je ne sais pas si je suis très clair... Je cherche la meilleure optique pour faire ce genre d'héritage, donc si quelqu'un à une idée ! Je m'embrouille avec tous les termes...

    Par avance, merci !!

    @+

  2. #2
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    tu ne peux pas faire une classe static qui hérite d'autre chose que d'Object...

  3. #3
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut
    donc si je veux garder cette arborescence, je ne peux donc pas utiliser une classe static au final.
    Je suis obligé de passer par une classe normale et que je devrais instancier dans mon application finale ? C'est bien ça si j'ai bien compris le principe ?

  4. #4
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Une classe statique est implicitement sealed, et donc non dérivable.

    Si j'ai bien compris ce que tu veux, une classe (abstraite?) en classe mère et des classes "normales" en filles, qui overrident (néologisme...) ou implémentent des méthodes statiques, répondrait en grande partie à ton besoin.

    Pas besoin ainsi d'instancier ta classe fille dans ton application/classe consommatrice si tant est que tu n'utilises que des méthodes statiques.

  5. #5
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut
    J'ai une classe static de base qui contient deux méthodes.
    La méthode 1 utilise la méthode 2. Seule cette dernière peut être modifié dans les classes "filles".

    Mon but est d'avoir au final une classe static qui redéfinie une méthode 2 et appelle la méthode 1.

    Bref, j'espère que cette explication est un peu plus claire...

    J'arrive pas à voir comment modéliser ça en fait, en n'ayant au final qu'une classe "fille" static dans mon application !
    Je ne peux pas appeler de méthode non statique dans une méthode static de ma classe "fille". C'est la conservation de l'état static qui me pose soucis

  6. #6
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Là par contre ça va coincer, je ne vois pas comment tu peux faire un override sur une méthode statique...

    Voici une implémentation qui devrait fonctionner (pas testé), mais avec une classe fille non statique.
    Si j'ai bien compris ce serait une méthode 3 qui utiliserait la méthode 1 de la classe mère.

    Classe mère :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public abstract class ClasseMere {
         protected static void Methode1(Object param) { ... this.Methode2(); }
         public virtual void Methode2(Object param) { ... // Jamais appelée a priori }
    }

    Classe fille :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public class ClasseFille : ClasseMere {
         protected override void Methode2(Object param) { ... // appelée par ClasseMere.Methode1 via ClasseFille.Methode3() }
         public static void Methode3(Object param) { ... ClasseMere.Methode1(); }
    }

  7. #7
    Membre émérite Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Par défaut
    Pas besoin d'héritage, tu peux juste faire une composition.

    Class de base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void Method
    {
    blabla
    SousMethode
    }
     
    virtual void SousMethod()
    {
    }
    Class static
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    private final static BaseClass bc = new BaseClass();
     
    void SousMethode()
    {
          blabla
    }
     
    void Methode
    {
        bc.Method()
    }

  8. #8
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut
    Merci pour ton exemple j'ai testé de la sorte :

    Code de la classe "mère"
    Code c# : 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
    public class ClassDeBase
    {
     
            public void DoWork(object obj)
            {
                Method1();
            }
     
            private void Method1()
            {       
                     //Blabla       
                    SousMethode(child);            
            }
     
            public virtual void SousMethode(object child)
            {            
            }

    Et pour ma classe "fille"
    Code c# : 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
    public class ClassFille : ClassDeBase
        {
     
            private static ClassDeBasebc = new ClassDeBase();
     
     
     
            public override void SousMethode(object child)
            {
            //blabla
            }
     
           public static void Run()
            {            
                bc.DoWork(obj);
            }

    Ca compile par contre ma méthode SousMethode n'est pas la bonne : il me garde celle de la classe mère

    @Er3van : mon objectif est au final d'avoir une classe "fille" appelée en static tel que ClassFille.Run() en gros
    Par contre dans ton code, je ne peux pas utiliser le This.Method2() car on part d'une méthode static non ?!

    Merci en tout cas

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

Discussions similaires

  1. [PHP 5.3] Questions héritage class static
    Par Général03 dans le forum Langage
    Réponses: 12
    Dernier message: 13/05/2011, 15h40
  2. Foncteur, classes templates et héritage
    Par Floréal dans le forum C++
    Réponses: 8
    Dernier message: 17/06/2007, 21h56
  3. Réponses: 15
    Dernier message: 06/04/2006, 12h05
  4. [Info] variable d'une classe static
    Par romdelf dans le forum Langage
    Réponses: 21
    Dernier message: 06/12/2005, 15h08
  5. Pb accès entre 2 classes static
    Par d.w.d dans le forum C++
    Réponses: 5
    Dernier message: 23/02/2005, 19h05

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