Exemple de clonage d'une classe dérivée de treenode

0/5 (3 avis)

Vue 16 075 fois - Téléchargée 451 fois

Description

Suite à une question dans le forum voici un petit exemple de code qui derive la methode Clone d'un TreeNode pour cloner les proprietes supplementaires...

Conclusion :


Les sources du Zip sont en C# 2 mais le code peut tout de meme etre copier en C# 1 / 1.1

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

benpolice
Messages postés
4
Date d'inscription
dimanche 20 novembre 2005
Statut
Membre
Dernière intervention
16 mai 2011
-
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)
cs_Crazyht
Messages postés
1522
Date d'inscription
mardi 18 décembre 2001
Statut
Modérateur
Dernière intervention
21 août 2010
4 -
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...
GW74372
Messages postés
6
Date d'inscription
mercredi 24 septembre 2008
Statut
Membre
Dernière intervention
31 mars 2010
-
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.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.