Caster une classe mère en sa fille

Résolu
Whismeril
Messages postés
17488
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
6 juillet 2022
- Modifié par Whismeril le 21/11/2013 à 21:43
Whismeril
Messages postés
17488
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
6 juillet 2022
- 24 nov. 2013 à 06:58
Bonsoir,

j'ai ce type de classes
    /// <summary>
    /// Ma classe mère qui décrit un phénomène
    /// </summary>
    class ClassMere
    {
        public string Description { get; set; }

        public int ID { get; set; }

        //........
    }

    /// <summary>
    /// Ma classe fille qui donne la durée d'un phénomène.
    /// </summary>
    class ClasseFille : ClassMere
    {

        public TimeSpan Duree { get; set; }
    }



A un moment donné, je me retrouve avec une liste de mères et j'aimerai en faire une liste de filles

            ClassMere maMere = new ClassMere();

            ClasseFille fille = (ClasseFille)maMere;

Ceci compile mais lève une exception à l'exécution "Impossible d'effectuer un cast d'un objet de type 'test.ClassMere' en type 'test.ClasseFille'."

Alors je tente une conversion implicite
        public static implicit operator ClasseFille(ClassMere mamam)
        {
            ClasseFille f = new ClasseFille();
            f.Description = mamam.Description;
            f.ID = mamam.ID;
            //...

            return f;
        }

Là ça ne compile pas: 'test.ClasseFille.implicit operator test.ClasseFille(test.ClassMere)' : les conversions définies par l'utilisateur vers ou d'une classe de base ne sont pas autorisées
Idem pour explicit évidement.

Donc au final, je me retrouve avec ça:
        public static ClasseFille Convertit(ClassMere mamam)
        {
            ClasseFille f = new ClasseFille();
            f.Description = mamam.Description;
            f.ID = mamam.ID;
            //...

            return f;
        }



Ca marche, mais je ne trouve pas ça beau, il faut qu'à chaque fois ou je voudrais cette conversion j'utilise la méthode static.
D'autre part (et c'est aussi vrai pour implicit et explicit), je suis obligé de transférer tous les champs de mère vers fille, et quand il y en a beaucoup c'est un peu case pied, alors que je les ai déjà tout prêts et emballés.

Quelqu'un sait il faire mieux?

Merci d'avance.

Penser aux balises de coloration syntaxique: bouton <>, préciser le langage :<code csharp>.
Quand la solution est trouvée, mettre la discussion Résolue.

4 réponses

NHenry
Messages postés
14944
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
4 juillet 2022
161
21 nov. 2013 à 22:16
Bonsoir,

Sans trop connaitre Java :
ClassMere maMere = new ClassMere();
ClasseFille fille = (ClasseFille)maMere;

Ne peut pas fonctionner, car ClasseMere n'est pas une ClasseFille
Mais :
ClasseFille maFille = new ClasseFille();
ClassMere mere = (ClassMere)maFille ;
Fonctionnera car ClasseFille est une ClasseMere

(Sauf erreur de ma part).
3
KX
Messages postés
16568
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
5 juillet 2022
124
22 nov. 2013 à 07:51
"Sans trop connaitre Java"
D'autant que ça n'en est pas ;-)

En C# on devrait faire :

if (mere is ClasseFille)
{
    ClasseFille fille = (ClasseFille) mere;
}

Mais typiquement il y a un problème dans ta hiérarchie de classes, il n'y a pas de raison quand on parle d'une personne que la mère soit une superclasse de la fille, en fait ce serait plutôt le contraire, car toutes les mères sont d'abord des filles, alors que toutes les filles ne sont pas mères...
0
NHenry
Messages postés
14944
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
4 juillet 2022
161
22 nov. 2013 à 13:44
"Sans trop connaitre Java"
D'autant que ça n'en est pas ;-)


On en peut même plus ne pas être réveiller ? :)
0