- PR -

クローンメソッドについて。

1
投稿者投稿内容
はたけ
常連さん
会議室デビュー日: 2006/02/08
投稿数: 27
投稿日時: 2008-10-01 14:15
C#にて、TreeViewを使用しました。
Nodeに対してはTreeNodeではなく、TreeNodeを継承したTreeNode2を設定しました。
それにより複数階層のツリーを作成しました。

ツリーのオブジェクトを作成し、それをコピーすると考えた場合、
this.Nodes[0].Clone()にて、オブジェクトが取得できます。(添え字0がrootツリー)
Clone()メソッドは、対象のノードオブジェクトに従属するノードを一緒に複製してくれます。
しかし、今回TreeNode2で作成を行っています。

(TreeNode2)this.Nodes[0].Clone()
にて取得を行った場合、this.Nodes[0]のノードはTreeNode2型になりますが、
this.Nodes[0]にぶら下がっているノードはTreeNode型で複製されてしまいます。

すべてのノードをTreeNode2で取得したい場合どのような方法があるのでしょうか?
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2008-10-01 14:44
.NET 3.5(というか 2.0 SP1)で試したところ、子孫ノードまできっちり TreeNode2 でクローンしてくれましたよ?
からあげ
会議室デビュー日: 2007/12/13
投稿数: 19
投稿日時: 2008-10-01 16:18
複製という意味がちょっと曖昧なので、勘違いしているかもしれませんが・・・。

TreeNode2で追加した属性(フィールド)が複製(値のコピー)されていないと
いう意味ならば、TreeNode2でCloneメソッドをオーバーライドして
追加したフィールドの値をコピーするコードを書かないとダメですよ。
はたけ
常連さん
会議室デビュー日: 2006/02/08
投稿数: 27
投稿日時: 2008-10-01 19:25
Hongliang様、からあげ様。

ありがとうございました。
私の意図していたことは、からあげ様が仰っていた内容そのものでした。
説明通り、Cloneメソッドのオーバーライドで簡単に実現できました。

危うく、全ノードを舐めて一つづつコピーをするというとんでもないコードを書くところでした。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)