web-dev-qa-db-ja.com

クラスで.Clone()を作成するか、コピーコンストラクタを作成する必要がありますか?

C#で何を使用すればよいのかよくわからない-理論的にはどちらも同じようにする必要がありますが、どちらも簡単に監視できると思います。または、私が考慮に入れなければならない別の可能性はありますか?

C++ではコピーコンストラクタを使用します。しかし、C#で私はそれらの多くを聞いたことがありません(それらはパラメーターとしてselfを持つ単なる俳優であり、すべてのデータを再割り当てする必要があります)

また、コピークターはすべてのオブジェクトをディープコピーする必要がありますか、それとも再割り当てするだけですか?

このシナリオの「ベストプラクティス」とは何ですか。

6
Mafii

コピーコンストラクタを使用します。理由は次のとおりです。

  1. IClonableセマンティクスがあいまいです。マイクロソフトは、クローンを浅いコピーにするか深いコピーにするかを指定していません。

  2. 各コピーに独自の一意のIDを付与したり、一部のフィールドのみをコピーして他のフィールドはコピーしないなど、コピーコンストラクターでカスタム動作を指定できます。

さらに読む
コピーコンストラクタとC#のクローン

4
Robert Harvey

関連するクラスがポリモーフィックである場合(適切なランタイム型のインスタンスが作成されるように)、cloneメソッドを使用します。

そうでなければ、それは私の意見では好みの問題です。

2
Bwmat

ユーザーがダイアログで[OK]を押したときのレコードの変更に関しては、データベースレコードインスタンスと比較する必要があります。元のHTTP getの複製に依存することはできません。誰かがあなたの前にレコードを変更して、競合状態になる可能性があるからです。

これが当てはまらない場合は、別のスレッドでカバーされているので、役立つことを願っています。 https://stackoverflow.com/questions/78536/deep-cloning-objects

0
StackOverFowl