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 :

type casting descendant


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de zulad
    Homme Profil pro
    creatif
    Inscrit en
    Juin 2007
    Messages
    714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : creatif

    Informations forums :
    Inscription : Juin 2007
    Messages : 714
    Par défaut type casting descendant
    Bonjour,

    j'essaye d'effecuer un simple casting de specialisation...

    J'ai deux classes :

    - Word
    - Categorem

    Categorem herite de Word qui contient un get/set d'un string private _word.
    En executant le code suivant je ne parviens pas à sortir _word :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
                Word word = new Word("Word");
                Categorem cat = (Categorem)word;
     
                cat.putWord = "test";
     
                Console.WriteLine(word.putWord);
    Y a-t'il moyen de forcer d'emblée le transtypage d'un moins specialisé sur un plus spécialisé ?

  2. #2
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ((Word)cat).putWord = "test"
    putWord fait partie de Word donc il faut que tu cast pour y avoir access!

  3. #3
    Membre très actif Avatar de zulad
    Homme Profil pro
    creatif
    Inscrit en
    Juin 2007
    Messages
    714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : creatif

    Informations forums :
    Inscription : Juin 2007
    Messages : 714
    Par défaut
    Microsoft visual c# 2005 ne me permet pas de caster vers le bas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Unable to cast object of type 'Dalbe.Components.Words.Word' to type 'Dalbe.Components.Words.Items.Categorem'.

  4. #4
    Membre très actif Avatar de zulad
    Homme Profil pro
    creatif
    Inscrit en
    Juin 2007
    Messages
    714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : creatif

    Informations forums :
    Inscription : Juin 2007
    Messages : 714
    Par défaut
    ok j'ai trouvé

    il n'accepte pas le typage d'un simple referent mais bien un nouvel objet, ça m'a l'air beaucoup plus strict que le c++. Avec cette manip j'ai un objet de trop...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                Word word = new Word("Word");
                Categorem cat = new Categorem();
     
                ((Word)cat).putWord = "test";
     
                Console.WriteLine(((Word)cat).putWord);
     
                System.Threading.Thread.Sleep(5000);
    Je vais refaire ça par ascendance... Quelqu'un a déjà tenté des héritages inversés ?

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Par défaut
    Citation Envoyé par zulad
    il n'accepte pas le typage d'un simple referent mais bien un nouvel objet, ça m'a l'air beaucoup plus strict que le c++.
    C'est juste logique. Tu crées une instance d'une classe de base et tu demandes de convertir ça dans une classe plus spécifique, avec potentiellement plein de champs et méthodes en plus. Comment veux-tu que la machine devine quoi mettre dedans ?

    Ça ne marche pas dans ce sens-là, encore heureux.

    Citation Envoyé par zulad
    Avec cette manip j'ai un objet de trop...
    Tu as surtout du code en trop.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Categorem cat = new Categorem();
    cat.putWord = "test";
    Console.WriteLine(cat.putWord);
    Categorem dérive de Word, putWord est public, rien de plus à faire.
    (si ce n'est réviser les bases de l'héritage :)

    Ta création d'un objet Word ne sert à rien, il n'est utilisé nulle part après. Si tu tiens à passer par ce constructeur, tu ajoutes un constructeur sur Categorem qui prend une chaîne et qui passe ça au constructeur de Word. Comme ça tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Categorem cat = new Categorem( "bleh" );
    et basta.

    Citation Envoyé par zulad
    Quelqu'un a déjà tenté des héritages inversés ?
    Du genre où les parents héritent des maladies génétiques de leurs enfants ? Faudrait déjà inventer le concept :)

  6. #6
    Membre très actif Avatar de zulad
    Homme Profil pro
    creatif
    Inscrit en
    Juin 2007
    Messages
    714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : creatif

    Informations forums :
    Inscription : Juin 2007
    Messages : 714
    Par défaut
    Tu as surtout du code en trop.
    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Categorem cat = new Categorem();
    cat.putWord = "test";
    Console.WriteLine(cat.putWord);Categorem dérive de Word, putWord est
    public, rien de plus à faire.
    (si ce n'est réviser les bases de l'héritage
    ben oui, normallement putword est dans categorem par defaut, seulement je suis obligé de caster pour sortir la methode ...

    Du genre où les parents héritent des maladies génétiques de leurs enfants ? Faudrait déjà inventer le concept
    Je vais y reflechir et préciser le fond de ma pensée si j'y arrive

Discussions similaires

  1. [LabVIEW 6.1] Problème de type cast
    Par ¤Dany¤ dans le forum LabVIEW
    Réponses: 3
    Dernier message: 23/10/2008, 21h06
  2. Réponses: 6
    Dernier message: 14/10/2008, 00h37
  3. type casting d'une ref
    Par Acropole dans le forum C#
    Réponses: 7
    Dernier message: 06/07/2008, 17h56
  4. Type casting variable
    Par zulad dans le forum C#
    Réponses: 2
    Dernier message: 28/06/2007, 01h57
  5. Réponses: 1
    Dernier message: 30/05/2006, 23h34

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