質問

こんにちは人々は、他のカスタムオブジェクトを参照するいくつかのカスタムオブジェクトを深くクローンする必要があります。

私は現時点でドキュメンテーションと構想の段階にいるので、それを正しくしようとしていません。

Q1。 iClonableを実装し、クローン化された正しいオブジェクトタイプを返す強く型付けられたカスタム関数を書き込むことができるのに、なぜオブジェクトを返すのですか?

Q2。オブジェクトはそれほど大きくなく、各要素をコピーする最初のヘビーリフティングをすることを気にしませんが、怠け者であることがオブジェクトをメンバーにしてから、参照メンバーに特定のコードを追加することができます。 CPUサイクルに関しては?

考え、意見、黙想が歓迎されました。

役に立ちましたか?

解決

見る 536349 iClonableを実装しない理由により。基本的に、独自の(強く入力された)インターフェイスを定義し、それを使用することができます。深いコピーを作成することを適切に文書化する限り、問題はありません。

他のヒント

インターフェイスの目的は、オブジェクトが実際に何であるかを心配することなく、インターフェイスをサポートするオブジェクトを人々が操作できるようにすることです。 iClonable.Cloneが実際に特定のオブジェクトで実際に実行することを知らずに、オブジェクトがiClonableをサポートすることを知っているだけではかなり役に立たないことを知るだけです。

コレクションタイプが保護されたベースクロン法を持っていること、そしてそれを公開する派生タイプを持つことは有用でした(そのようにすることで、コレクションからクローン可能で非摂取可能なタイプを導き出すことができます)。コピーコンストラクターへの引数は辞書から派生したが内部的に著しく異なるため、辞書サポートのようなものがクローンメソッドを含めるよりも優れています。

クローニングインターフェイスが役立つには、アイテムがクローニングについてどのように感じたかを言うことができるプロパティを含める必要があります(例:-1-タイプは不変であり、クローニングを必要としません; -2-タイプをクローニングすると壊れる可能性がありますそれ; -3-タイプはクローニングをサポートします)、そして、深いクローン操作がすべてのオブジェクトをチェックしてクローニングを気にしないことを確認することを指定します。残念ながら、そのようなものはフレームワークには存在しません。

派生タイプのセットにクローン可能なバージョンと非透過性のバージョンが含まれる場合、オブジェクトがクローン可能であることを示すインターフェイスを持つことが役立つ場合があります。タイプの誘導体がクローニングをサポートできない可能性がある場合、そのタイプのクローニング方法を保護する必要があります。タイプのクローン可能なバージョンはそれから導き出す必要がありますが、他のタイプは非透過性バージョンから派生する必要があります。

たとえば、cloneablewidgetやsuperwidget(クローン可能ではない)を含む派生型のタイプウィジェットを持つことができます。 SuperWidgetには、派生したタイプのCloneAblesuperwidgetを持つことができます(クローン化された場合に壊れる他の人とともに)。タイプウィジェットのすべてのクローン可能な導関数で作業できるようにしたい場合、オブジェクトがウィジェットから派生し、クローン可能であることを確認する必要があります。クローン可能な導関数にiClonableを追加すると、そのようなオブジェクトをチェックできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top