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 :

héritage avancé : masquer une propriété dans une classe parent via une classe fille


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut héritage avancé : masquer une propriété dans une classe parent via une classe fille
    bonjour

    Je cherche une méthode pour masquer une propriété dans une classe parent via une classe fille.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    public class parent 
    {
    public XmlDocument xmlcontent {get;set;}
    public int Id {get;set;}
    }
    avac une classe fille pour faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    public class fille:parent
    {
    ///quelque chose pour masquer ça public XmlDocument xmlcontent {get;set;}
    }

    J'aurai que id qui est public dans ma classe fille.

    NB: la classe parent est auto-générée donc il faut la toucher

    merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    ce que tu demandes, c'est en total opposition avec les principes de la programmation objet...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Par défaut
    J'ai pas tout compris et je pense que theMonz31 à de bon conseil

    Sinon rapidement pour masquer le polymorphisme avec le mot clé new (ce n'est pas ce que tu souhaites faire je crois mais bon...):
    virtual dans la classe mère
    override dans la classe fille // ça c'est le polymorphisme classique
    new dans la classe fille // pour masquer le polymorphisme, et créer une nouvelle méthode/propriété

    Ca sert typiquement pour gérer du versionning // enfin c'est surtout dans des cas critiques, généralement on a pas besoin d'un tel comportement

  4. #4
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    je sais

    l'origine de mon problème est que ma classe parent est auto-générée et contient un XmlDocument, qui est indésirable dans mes traitements (sérialisation).

    Je dois créer une autre classe fille qui hérite de cette classe (c'est parce que la classe est auto-générée ) pour avoir que les autres proprieties de telle sort que je sérialise que les autres

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Par défaut
    https://msdn.microsoft.com/fr-fr/lib...vs.110%29.aspx
    XmlIgnoreAttribut / [Nonserialized]

    mais faut toucher à la génération de la classe mère... je ne sais pas si y a une astuce pour injecter cet attribut depuis la fille...

    Sinon faut gérer soit même la sérialisation dans la classe fille, c'est peut être la meilleurs méthode pour ton problème.

    EDIT: http://stackoverflow.com/questions/5...alizing-object
    I don't think XML serialization can help you with what you're trying to do, unless you implement IXmlSerializable yourself...
    NB: remarquez que le post contient une réponse de notre Thomas Levesque héhé

  6. #6
    Membre chevronné Avatar de pascalCH
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Juillet 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 188
    Par défaut
    Bien que ce soit effectivement en totale opposition aux règles du modèle objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        public class fille : parent
        {
            ///quelque chose pour masquer ça public XmlDocument xmlcontent {get;set;}
            [System.Xml.Serialization.XmlIgnore]
            protected new XmlDocument xmlcontent { get { return base.xmlcontent; } set { base.xmlcontent = value; } }
        }
    Entorse acceptée vu que la classe de base est auto-générée, mais n'y a t-il pas moyen d'intervenir sur le générateur de code ? et d'ailleurs, quel est -il ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Par défaut
    A noter qu'avec la solution de pascalCH, tu rencontrera toujours ton problème si ton appel se fait ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    parent o = new fille();
    en effet, le xmlcontent sera celui du parent // contrairement au polymorphisme classique...
    Donc tu risques de te retrouver à nouveau avec ton problème de sérialisation dans ce cas de figure
    (j’espère ne pas dire de bêtise)

    Sinon pour l'injection d'attribut, tu as peut être cette solution élégante:
    http://stackoverflow.com/questions/2...nherited-class
    https://msdn.microsoft.com/en-us/lib...attribute.aspx
    // je compte sur toi pour nous en faire un feedback
    EDIT: arf ca va pas marcher si ta classe générée n'est pas partielle... TOUJOURS mettre les classes générées en partial... ça sert à ça se mot clé justement

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/01/2009, 11h23
  2. Utilisation d'une propriété dans une table
    Par pcayman dans le forum Modélisation
    Réponses: 1
    Dernier message: 12/05/2007, 18h42
  3. Réponses: 6
    Dernier message: 30/11/2006, 18h15
  4. Réponses: 2
    Dernier message: 23/11/2006, 21h23
  5. Réponses: 1
    Dernier message: 15/06/2006, 18h01

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