EXEMPLE DE CLONAGE D'UNE CLASSE DÉRIVÉE DE TREENODE

benpolice Messages postés 4 Date d'inscription dimanche 20 novembre 2005 Statut Membre Dernière intervention 16 mai 2011 - 7 févr. 2008 à 15:25
GW74372 Messages postés 6 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 31 mars 2010 - 27 juil. 2009 à 16:41
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/31423-exemple-de-clonage-d-une-classe-derivee-de-treenode

GW74372 Messages postés 6 Date d'inscription mercredi 24 septembre 2008 Statut Membre Dernière intervention 31 mars 2010
27 juil. 2009 à 16:41
Bonjour,
j'avoue être surpris du peu de renseignement sur le sujet
Mais voici l'astuce que j'ai trouvé dans ce cas:

public override object Clone()
{
MyTreeNode node = new MyTreeNode();
((TreeNode)node)=base.Clone();
node.m_MaPropriete = this.m_MaPropriete;
return node;
}

En fait, j'étais tombé sur ce probleme en VB.Net et j'ai du le résoudre de la même manière.
Si quelqu'un d'autre à une meilleur idée, je suis vivement intéresser.
cs_Crazyht Messages postés 1522 Date d'inscription mardi 18 décembre 2001 Statut Membre Dernière intervention 21 août 2010 8
7 févr. 2008 à 17:31
Alors la comme ca tres franchement je vois pas, personnelemnt je passes plus facilement par une serialisation Binaire puis une deserialisation pour faire des clones.

Votre explication semble plus que logique en effet, si je trouve 2 minutes à l'occasion, je regarderais...
benpolice Messages postés 4 Date d'inscription dimanche 20 novembre 2005 Statut Membre Dernière intervention 16 mai 2011
7 févr. 2008 à 15:25
dans votre code vous faites un
public override object Clone()
{
MyTreeNode node = (MyTreeNode)base.Clone();
node.m_MaPropriete = this.m_MaPropriete;
return node;
}
j'ai réutilisé cette technique en prenant comme classe mère la classe A, et puis je définis une classe B qui hérite de A. Je me retrouve dans la même situation que vous, c'est à dire que ma classe A TreeNode, et ma classe B MyTreeNode.

Je travaille avec C#, pas c#2, et la ligne
MyTreeNode node = (MyTreeNode)base.Clone(); est incorrecte, car, le base.Clone() retourne une instance de la classe TreeNode, et ne peut être transtypée en objet de la classe MyTreeNode, cela constitue une erreur.

Ce qui est logique, car le base.Clone() retourne effectivement un objet de type Treenode, il est impossible de le considérer ensuite comme un objet de type MyTreeNode. L'inverse est par contre possible, car un MyTreeNode est un TreeNode, mais un TreeNode n'est pas un MyTreeNode.

on obtient à l'exécution une erreur du type "invalid cast".
Comment expliquez vous cela?

Extreme Programmer. (benpolice@hotmail.com)
Rejoignez-nous