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 :

Une classe statique ne peut pas dériver d'une autre classe statique ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut Une classe statique ne peut pas dériver d'une autre classe statique ?
    Bonjour tout le monde,

    j'essaie de faire dériver une classe statique d'une autre classe statique, et j'ai l'erreur de compilation suivante CS0713 :
    La classe statique 'type statique' ne peut pas dériver du type 'type'. Les classes statiques doivent dériver d'objets.
    Avec comme raison :
    Si cela était autorisé, la classe statique hériterait des méthodes et des membres non statiques de la classe de base ; elle ne serait donc pas statique. Par conséquent, ce n'est pas autorisé.
    Ce qui se justifie pleinement si on essayait de la faire dériver d'une classe non statique mais qui n'a pas de sens si on veut la faire dériver d'une classe de base statique.

  2. #2
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Hello,

    étant donné qu'une classe statique ne peut pas contenir de méthodes ou de membres protégés, il ne sert à rien d'en hériter. Puisqu'un éventuel fils aurait accès aux mêmes membres que tous les autres (à savoir les membres publics).

    Quel est ton besoin ? pourquoi tes classes sont-elles statiques ? Pourquoi veux-tu faire de l'héritage ?

  3. #3
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Hello,

    étant donné qu'une classe statique ne peut pas contenir de méthodes ou de membres protégés, il ne sert à rien d'en hériter. Puisqu'un éventuel fils aurait accès aux mêmes membres que tous les autres (à savoir les membres publics).
    C'est parce qu'il ne peut pas y avoir d'héritage qu'elle ne peut pas contenir de méthodes ou membres protégés et non l'inverse.

    Citation Envoyé par Guulh Voir le message
    Quel est ton besoin ? pourquoi tes classes sont-elles statiques ? Pourquoi veux-tu faire de l'héritage ?
    J'ai une classe statique dans une ensemble qui possède des membres, propriétés et méthodes statiques qui sert de conteneur de Command pour le ribbon de Microsoft. Cette classe possède tout ce qu'il faut pour fonctionner, mais ne possède pas de Command spécifiques à certains projets.
    Puis, j'ai un projet qui possède un ruban et je voudrais déclarer de nouvelles commandes dans ce nouveau projet dans une classe statique qui réutiliserait la première classe statique.
    On pourrait le faire en rendant tout ce qui est nécessaire dans la première en public, ce que j'ai fait, puis y accéder via MaClasseStatiqueBase.ProprieteStatique mais je trouve ça embêtant de devoir rendre public toute la mécanique de fonctionnement interne.

  4. #4
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par WebPac Voir le message
    C'est parce qu'il ne peut pas y avoir d'héritage qu'elle ne peut pas contenir de méthodes ou membres protégés et non l'inverse.
    Non non c'est parcequ'il n'y a pas de membres d'instance que ca ne marche pas d'hériter.

    Citation Envoyé par WebPac Voir le message
    J'ai une classe statique dans une ensemble qui possède des membres, propriétés et méthodes statiques qui sert de conteneur de Command pour le ribbon de Microsoft. Cette classe possède tout ce qu'il faut pour fonctionner, mais ne possède pas de Command spécifiques à certains projets.
    Puis, j'ai un projet qui possède un ruban et je voudrais déclarer de nouvelles commandes dans ce nouveau projet dans une classe statique qui réutiliserait la première classe statique.
    On pourrait le faire en rendant tout ce qui est nécessaire dans la première en public, ce que j'ai fait, puis y accéder via MaClasseStatiqueBase.ProprieteStatique mais je trouve ça embêtant de devoir rendre public toute la mécanique de fonctionnement interne.
    Pourquoi ne pas passer par un genre d'aggregation?

  5. #5
    Membre éclairé Avatar de WebPac
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 947
    Par défaut
    Citation Envoyé par PitMaverick78 Voir le message
    Non non c'est parcequ'il n'y a pas de membres d'instance que ca ne marche pas d'hériter.
    C'est l'histoire du serpent qui se mord la queue.
    Je ne vois toujours pas pourquoi il ne peut pas y avoir d'héritage de classes statiques qui puisse accéder aux membres, propriétés et méthodes statiques.

    Citation Envoyé par PitMaverick78 Voir le message
    Pourquoi ne pas passer par un genre d'aggregation?
    C'est à dire ? Je ne vois pas très bien ce que tu entends par là.

  6. #6
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par WebPac Voir le message
    C'est l'histoire du serpent qui se mord la queue.
    Je ne vois toujours pas pourquoi il ne peut pas y avoir d'héritage de classes statiques qui puisse accéder aux membres, propriétés et méthodes statiques.


    C'est à dire ? Je ne vois pas très bien ce que tu entends par là.
    L'héritage concerne uniquement les membres d'instance. Une classe statique ne possède pas de membres d'instance elle ne peut donc pas être héritée.

    Pour la sorte d'aggregation il faudrait que tu encapsules la classe statique "de base"

    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
     
    public static class A
    {
        public static void Fonc1()
        {
            ...
        }
    }
     
    //Classe "heritée"
    public static class B
    {
        public static void Fonc1()
        {
            A.Fonc1();
        }
    }

Discussions similaires

  1. Réponses: 9
    Dernier message: 08/08/2016, 15h52
  2. Réponses: 1
    Dernier message: 12/07/2010, 21h00
  3. Réponses: 0
    Dernier message: 08/08/2008, 10h47
  4. Une fonction virtuelle ne peut pas retourner un template!
    Par coyotte507 dans le forum Langage
    Réponses: 10
    Dernier message: 08/02/2008, 20h39
  5. Réponses: 3
    Dernier message: 06/03/2007, 14h15

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