- - PR -
C# ArrayList のコピーについて
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-09-08 18:17
catsさん、囚人さんありがとうございます。
返信が遅くなってしまい、申し訳ありません。 ディープコピーは結局よく分からず、感覚でいくと ArrayList list2 = new ArrayList(); for(int i = 0 ; i < _list.Count ; i++) { clsData d = (clsData)_list[i]; clsData a = new clsData(); a.No = d.No; a.Data = d.Data; list2.Add(a); } このように、書かなくては、いけないということなのでしょうか。 (勉強不足で申し訳ありません) 囚人さんの、MemberwiseClone() <これまた新しい言葉です・・・> はバッチリできました。 と思ったのですが、やはり「10」と出てしまいました。 MemberwiseCloneでもできないとなると、上記のように、記述しなくては いけないということなのでしょう・・・・・ 本当に皆様ありがとうございました。 とても、勉強になりました。 [ メッセージ編集済み 編集者: もも 編集日時 2005-09-08 18:24 ] | ||||||||||||
|
投稿日時: 2005-09-08 18:42
感覚的にはそれでつかめてると思います。 勿論そこまでべた書きすると、 生産・保守性ともに低下するので コピー処理のコードは、メソッドに引越しするべきです。
こんな感じのコードでしょうかね。
MemberwiseCloneはシャローコピー(簡易コピー・浅いコピー)です。 って、リンク先に書いてあったような。。 で、MemberwiseCloneっていうのは(推測ですけど) IClonableインタフェイスを継承して、Clone()を独自実装してしまうと、 Clone()でシャローコピーができなくなりますよね。 で、その回避用メソッドとして MemberwiseClone()が提供されていて、 こちらは、常にシャローコピーを返してくれるのだと思います。 #1敲が大嘘のコードだったので修正 #さらに修正orz [ メッセージ編集済み 編集者: 葉瀬崎浩樹 編集日時 2005-09-08 18:56 ] | ||||||||||||
|
投稿日時: 2005-09-08 19:10
clsDataクラスにclsData自身が引数のコンストラクタを作る方法です。
コピーをListに加える
こんな感じでどうですか? | ||||||||||||
|
投稿日時: 2005-09-08 19:47
> IClonableも使うときに、キャストがいるので嬉しくないです。
明示実装して隠蔽してます。こんな感じ。
インターフェイスにキャストして呼ばれると、キャストし直さなければなりませんが... > clsDataクラスにclsData自身が引数のコンストラクタを作る方法です あ〜!!なんか、「コピーコンストラクタは作れない」と思いこんでいた。。。 何でだったんだろう?? _________________ | ||||||||||||
|
投稿日時: 2005-09-08 19:54
葉瀬崎浩樹さま、未記入さま、Jittaさま本当にありがとうございます。
MemberwiseCloneについて、ご教授いただきありがとうございます。 調べ足りない自分を反省します。 > clsDataクラスにclsData自身が引数のコンストラクタを作る方法です 未記入さまさまの方法には、ビックリしました。 コンストラクタにこんな使い方があるのですね。 C# 奥が深いです・・・・・ | ||||||||||||
|
投稿日時: 2005-09-08 19:56
class clsData : ICloneable
{ public int No; public string Data; object Clone() { return MemberwiseClone(); } } こういうときに、MemberwiseClone() を使うのでは? [ メッセージ編集済み 編集者: 囚人 編集日時 2005-09-08 19:57 ] | ||||||||||||
|
投稿日時: 2005-09-08 20:17
あー、protectedメンバやったんや。。 そのように使うのが正しいですね。 大変勉強になります! #というか、自分こそちゃんとドキュメントしっかり読めと [ メッセージ編集済み 編集者: 葉瀬崎浩樹 編集日時 2005-09-08 20:19 ] | ||||||||||||
|
投稿日時: 2005-09-08 20:28
いやぁ、結局簡易コピーは簡易コピーなんですよね。 自分のオブジェクトグラフに対して全て MemberwiseClone() を呼んでくれるようなものがあれば、幸せだなぁと思うときがたまにあるんですよね。駄目な理由って何かあるんでしょうか。 |