Caster une classe mère en sa fille

Résolu
Whismeril Messages postés 18939 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 22 février 2024 - Modifié par Whismeril le 21/11/2013 à 21:43
Whismeril Messages postés 18939 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 22 février 2024 - 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 15098 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 février 2024 158
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 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
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 15098 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 février 2024 158
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
Rejoignez-nous