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 et types classe fille dans classe mère


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut Héritage et types classe fille dans classe mère
    Bonjour à tous,

    J'ai un petit soucis technique et je ne sais pas si ce que je cherche à faire est jouable ou non.

    J'ai une classe mere CLS_MERE et une classe fille qui herite de CLS_MERE nommée CLS_FILLE.

    Dans CLS_MERE j'aimerai faire un traitement global à toutes les classes filles tout en ayant connaissance du type de CLS_FILLE.
    Grosso modo, dans CLS_MERE j'ai une variable Backup de type CLS_MERE dans laquelle j'aimerai mettre une nouvelle instance de CLS_FILLE au travers de la reflection. Le problème, c'est que si je fais un Assembly.CreateInstance de this.GetType.FullName ca risque de me créer une instance de CLS_MERE alors que l'appel provient d'une instance de type CLS_FILLE.

    Auriez vous une idée à ce propos svp ?
    Merci d'avance

    @+

  2. #2
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    Assembly.CreateInstance de this.GetType.FullName

    tu le fais dans la classe fille?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut
    dans la classe mere

  4. #4
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    c'est normal qu'il t'envoie le type de la classe mère si tu l'appelles depuis celle-ci

    fait une méthodes en abstract ou en virtual dans la classe mère et override celle ci dans la classe fille, et c'est la que tu appel Assembly.CreateInstance de this.GetType.FullName

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Points : 377
    Points
    377
    Par défaut
    Merci mais justement, j'aimerai ne pas devoir l'implémenter dans chaque classe fille c'est ça la contrainte !

  6. #6
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if( this is CLS_FILLE)
    {
       Assembly.CreateInstance de this.GetType.FullName
    }

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Bonjour

    Pas besoin de passer par la Reflection ici.

    Il suffit de déclarer une classe générique intermédiaire de type CLS_MERE<T>.

    Exemple : (disons que la méthode Clone permet de créer le 'backup' - aprés tu ajustes pour ton implémentation).

    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
    18
    19
    20
    21
     
    class CLS_MERE
    {
    public CLS_MERE()
    {
    }
    // .........
    protected CLS_MERE _backUp;
    }
    class CLS_MERE<TFILLE> : CLS_MERE where TFILLE : CLS_MERE, new()
    {
    public virtual TFILLE Clone()
    {
     _backUp = new TFILLE();
     return (TFILLE)_backUp;
    }
    }
    class CLS_FILLE : CLS_MERE<CLS_FILLE>
    {
    // .........
    }
    Plus élégant, non ?

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/09/2013, 10h02
  2. Réponses: 4
    Dernier message: 14/12/2011, 15h58
  3. Héritage de données dans classe fille
    Par neonico dans le forum Langage
    Réponses: 3
    Dernier message: 01/09/2011, 10h40
  4. Réponses: 21
    Dernier message: 22/10/2007, 10h10
  5. Héritage d'un événement pour une classe fille
    Par korntex5 dans le forum Langage
    Réponses: 4
    Dernier message: 11/01/2006, 16h48

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