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
27 juil. 2009 à 16:41
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.
7 févr. 2008 à 17:31
Votre explication semble plus que logique en effet, si je trouve 2 minutes à l'occasion, je regarderais...
7 févr. 2008 à 15:25
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)
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.