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 :

CodeDom & abstract override


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut CodeDom & abstract override
    Bonjour,

    Gros soucis à l'utilisation du CodeDom.

    Je cherche à déclarer une méthode en abstract override, mais visiblement le provider par défaut ne le gère pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // set its attributes
    MemberAttributes attributes = MemberAttributes.Public;
    // if abstract
    if(isAbstract)
        attributes |= MemberAttributes.Abstract;
    // if override
    if(isOverride)
        attributes |= MemberAttributes.Override;
    // set the computed attributes
    this._method.Attributes = attributes;
    abstract + public ca marche bien
    override + public ca marche bien,
    mais abstract + override non.
    Il me fait le public virtual à la place (attributs par défaut)
    (et public + abstract + override pareil)

    Question :
    * Quelqu'un s'est déjà penché sur le problème et a trouvé un moyen de contourner / résoudre ?
    * Non, le CodeSnippetExpression n'est pas la solution que j'attends

    Merci

  2. #2
    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
    Une méthode abstract ne peut pas être un override, ça n'aurait pas de sens... pourquoi voudrais-tu faire ça ?

  3. #3
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Si si ça a un sens.

    Une classe abstraite peut être dérivée en une autre classe abstraite.
    On dit "enrichie".

    Dans ce cas, chacune de ses méthodes abstraite doit être soit implémentée, soit "propagée" par le modifieur abstract override.

    Je me sers très couramment de ce principe.
    Mais ceci n'est pas le sujet de ce post.

    Je m'inquiète beaucoup de la limite du CodeDom.

  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
    effectivement c'est peut-être un bug de CodeDom... bizarre

    Mais de toutes façons, je persiste à pense que le modifieur abstract override ne sert à rien :
    Dans ce cas, chacune de ses méthodes abstraite doit être soit implémentée, soit "propagée" par le modifieur abstract override.
    Si tu ne l'implémentes pas, elle sera quand même propagée aux classes dérivées, sans avoir besoin de ce modifieur... fais le test, tu verras bien

  5. #5
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Je te garantie que non
    Je t'invite à faire le test.
    Ton compilateur va râler parce que tu n'overrides pas un membre abstrait.
    C'est un mécanisme que j'utilise vraiment souvent

    La règle pour le compilateur est simple : si tu dérives d'une abstraite, tu dois overrider tous les membres abstraits.

  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
    Bon, comme tu m'as fait douter, j'ai testé... et je maintiens ma position !

    Citation Envoyé par Mose Voir le message
    La règle pour le compilateur est simple : si tu dérives d'une abstraite, tu dois overrider tous les membres abstraits.
    A quoi j'ajouterais : sauf si ta classe dérivée est aussi abstraite.

    Ce code compile sans problème :

    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
        public abstract class A
        {
            public abstract void X();
        }
     
        public abstract class B : A
        {
        }
     
        public class C : B
        {
            public override void X()
            {
                Console.WriteLine("Hello world !");
            }
        }
    Ou alors on a pas le même compilateur... je code en C# 3 (VS2008), peut-être que ça a changé par rapport à la version précédente ? En tous cas ça me semble plus logique comme ça...

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/04/2014, 11h16
  2. Erreur compilation "not abstract and does override"
    Par stever50 dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 08/03/2012, 10h48
  3. Réponses: 4
    Dernier message: 18/01/2006, 21h19
  4. Abstract VS virtual
    Par LE CHAKAL dans le forum Langage
    Réponses: 2
    Dernier message: 29/08/2002, 17h50

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