- - PR -
オブジェクトのコピーってどうやるんですか?
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-24 19:53
残念。無理です。
Clone() を virtual にしておいて…っていうのも、インスタンスが「派生したクラス」でないと駄目ですね。 「派生したクラス」の方が「基本クラス」を受け取る準備をするしかないです。 From基本クラス()メソッドやコンストラクタで。 _________________ 囚人のジレンマな日々 | ||||||||
|
投稿日時: 2006-01-25 00:11
派生クラスにしかない情報を考慮しないのであれば、できないこともないです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-01-25 14:26
やはり、自分で値を引き渡す部分を書かないと駄目なのですね。 了解です。ありがとうございました。
考慮しないで良いです。 先のコードで言うところの「属性」プロパティですよね。 この値は、どうなっても良いです。 どうすれば良いのでしょう? | ||||||||
|
投稿日時: 2006-01-25 15:30
すいません、書き方が適切ではなかったです。 MemberwiseClone メソッドで生成されたクローンでは、ダウンキャストができません。 MemberwiseClone メソッドに頼らず、目的の型に対して手動でコピーしなければなりません。 ダウンキャストが出来るのは、"格納している型が" 基底型と言いつつも、 元々のインスタンスの "実際の型" がその型と互換があるものです。 格納されたインスタンスの "実際の型" が変わるわけではないので、 ダウンキャストに際し、インターフェイスを介してもダメということです。 つまり、ダウンキャストは、 「オブジェクトを示すメモリ領域の位置は変わらない」 「コピーしているわけではない」 ということです。 (格納している型と、実際の型の話が混ざっているので読みにくいですね...) 囚人さんの例にもあるように、 > 「派生したクラス」の方が「基本クラス」を受け取る準備をするしかないです。 > From基本クラス()メソッドやコンストラクタで。 とするか、基本クラスが準備してしまうことになりますが、 どちらにしても、あまり良いパターンではありません。 それをやるくらいならば、MemberwiseCopy メソッドは使う "価値" がないです。 どちらかと言えば、前者の案の方が良いでしょう。 (後者だと、派生クラス側で実装を隠す必要が出てくるため) # 何度も書き直しました... ( ̄- ̄;) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-01-25 18:54
いや、凄く分かりやすい説明だと思います。 この部分に関しては、コピーしたものをキャストしてみたり、基本クラスからオブジェクトを生成させたものをキャストさせたり、と色々と試してみたのですが、上記の説明を読めば納得できます。 ありがとうございました。 |