彼らは明らかにどこかでそれを使用しました、なぜ彼らはそのような方法として与えなかったのですか?(彼らがどこでもそれを使用しなかったとしても、彼らはまだ私たちにそのような方法を与えたかもしれません)。
5 に答える
おそらく、ディープクローニングのナイーブな実装は、役立つよりも危険であるためです。細心の注意を払わないと、複製すべきでないものも含めて、アプリケーションヒープ全体の巨大なチャンクを誤って複製する可能性があります。実際には、ディープクローニングは通常、実装固有です。クローン作成者は、探しているものを認識しており、それらのパスのみをたどります。
Eric Lippertの古典的な答えもあります。単純なものを追加するのは難しいため、彼らはそれを提供しませんでした。
オブジェクトごとに異なるディープクローンの動作が発生するためです。一部のオブジェクトはシングルトンであり、クローンを作成することはできません。また、「ディープクローン」の概念は、すべてのオブジェクトでそれほど明白ではありません。
一般に、ディープ コピー (またはクローン作成) は容易ではありません。これは、クラスには通常、「シーケンシャル メモリ ブロック」として表現してコピーすることが困難な可能性がある他のクラスへの参照が含まれているためです。そのため、通常、オブジェクトをシリアライズ/デシリアライズすることによって行われます。これにより、実際に何をどのようにコピーするかを制御できます。
これを直接体験することに興味がある場合は、独自のシリアライザーを作成してみてください。これは非常に興味深いプロジェクトであり、この一見単純なトピックの背後に隠されている多くの微妙な (そしてそれほど微妙ではない) 問題に気付くでしょう。
BinaryFormatterのネイティブな動作は、実際にはディープクローンです。.NET 1.0以降はIClonableインターフェイスがありますが、廃止されており、MSは、特にIClonable実装がディープクローンを実行するか浅いクローンを実行するかを消費者が必ずしも知らないという懸念から、このインターフェイスの実装を推奨していません。ディープクローニングは危険です。
ディープ クローニングは、いくつかの名前空間を保証するほど深刻だからです。シリアル化を参照してください。