ホームページ  >  記事  >  バックエンド開発  >  C# のディープ コピーとシャロー コピーの違いの分析と例

C# のディープ コピーとシャロー コピーの違いの分析と例

高洛峰
高洛峰オリジナル
2017-01-19 13:11:561176ブラウズ

ディープ コピーとは、ソース オブジェクトとコピーされたオブジェクトが互いに独立しており、一方のオブジェクトに変更を加えても、もう一方のオブジェクトには影響を与えないことを意味します。たとえば、Zhang San という名前の人は、後に Li Si という名前の別の人のクローンを作成するために使用されます (法律が許可していると仮定します)。Zhang San が腕と脚を失っても、Li Si が腕と脚を失っても、それは他の人には影響しません。 。より一般的なものは、定義済み型 Int32、Double、構造体 (struct)、列挙型 (Enum) などの Value オブジェクトです。

浅いコピーとは、ソースオブジェクトとコピーオブジェクトがエンティティを共有し、参照される変数のみが異なる(名前が異なる)ことを意味します。いずれかのオブジェクトを変更すると、もう一方のオブジェクトにも影響します。たとえば、最初は張三という名前だった人が、後に李四に名前を変えましたが、張三が腕と足を失っても、李四が腕と足を失っても、同じ人物であることに変わりはありません。 。

C# には 2 種類の変数があり、1 つは値型変数、もう 1 つは参照型変数です。前者の場合、コピーは完全なコピーですが、後者の場合、一般的なコピーは単なる浅いコピーであり、参照ポインタのみを渡すことと同じです。したがって、後者の実際のコピーを作成するのが最も面倒です。具体的には、ICloneable インターフェイスで提供される Clone メソッドを実装する必要があります。

定義を見てください:
浅いコピー (シャドウ クローン): オブジェクトの基本タイプのみをコピーします。オブジェクト タイプは依然として元の参照に属します。
深いコピー (ディープ クローン): の基本クラスはコピーしません。オブジェクトですが、元のオブジェクトもコピーします。つまり、新しいオブジェクトによって完全に生成されます。

浅いコピーと深いコピーの違い
浅いコピーは、オブジェクト内の数値型フィールドをコピーすることを指します。一方、オブジェクト内の参照フィールドは、その参照の 1 つをターゲット オブジェクトにコピーすることを意味します。ターゲット オブジェクトの参照フィールドの値が変更されると、その値は元のオブジェクトに反映されます。つまり、元のオブジェクトの対応するフィールドも変更されます。ディープ コピーとシャロー コピーの違いは、参照の処理です。ディープ コピーでは、元のオブジェクトの対応するフィールド (同じコンテンツ) と同じ新しいフィールド、つまりこの参照が新しいオブジェクトに作成されます。参照は元のオブジェクトと同じです。新しいオブジェクトでこのフィールドを変更しても、元のオブジェクトの対応するフィールドの内容には影響しません。したがって、プロトタイプモードには、オブジェクトの浅いコピーと深いコピーという 2 つの異なる処理方法があります。

以下のコードの例を見ると、浅いコピーと深いコピーの違いがはっきりとわかります。

rreee

はい、プロジェクトはまだ終わっていないので、急いでください。コードはプロジェクトに直接コピーして実行できます。

C# のディープ コピーとシャロー コピーの差分分析と例に関するその他の記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。