浅い対深いコピーの違い:
数値フィールドに新しいオブジェクト・タイプにコピーされたオブジェクトの浅いコピーを参照し、参照がターゲットオブジェクトにコピーを参照して、オブジェクト・タイプ・フィールドが参照。あなたは彼が元のオブジェクトに反映されるフィールドで参照対象のオブジェクト型の値を変更すると、それは、対応するフィールドに元のオブジェクトが変更されると言うことです。
ディープコピーは浅いコピー処理の参照のために異なっている、ディープコピーは、同じフィールド(内容)フィールドを作成し、元のオブジェクトの参照である新しいオリジナル新しいオブジェクトに対応するオブジェクト、及び参照であります別の時間、私たちは、対応するフィールドに、元のオブジェクトの内容には影響しません。このフィールドの新しいオブジェクトを変更しました。
オブジェクトのコピーの浅いおよび深いコピー:したがって、異なるモードのプロトタイプ(原型パターン)のための2つの処理方法があります
MemberwiseCloneメソッドは、新しいオブジェクトを作成することによって、簡易コピーを作成し、新しいオブジェクトに現在のオブジェクトの非静的フィールドをコピーします。フィールドが値型の場合、フィールドは、ビットコピーによってビットを行います。フィールドが参照型である場合、参照をコピーするが、参照されるオブジェクトをコピーしない。したがって、元のオブジェクトのコピーを、同じオブジェクトを参照。ディープコピーは、すなわち、ICloneableインターフェイス.ICloneableディープコピーと浅いコピーを実装するために使用することができます。
ICloneable .NETへのインタフェースを提供し、このインタフェースのクローン()メソッドは、それはあなた自身、このような深いか、浅いクローンクローンとしてクローニング方法を実現するために達成することができ、MemberwiseClone()は、オブジェクトクラスのメソッドです浅いクローンの実装クラス
以下は、参考のために、深いと浅いコピーモデルのコピーであります
[直列化] パブリック クラスInvoiceDetailResponse:IDeepCopy、IShallowCopy { 公共のGUIDのmerchant_id { 得ます。セット; } /// <要約> /// 名称 /// </要約> パブリック 文字列のuname { 得ます。セット; } /// <要約> /// 浅拷贝 /// </要約> /// </復帰> <戻り>を パブリック オブジェクトShallowCopy() { 戻り これを)(.MemberwiseCloneします。 } /// <要約> /// 深拷贝 /// </要約> /// <戻る> </戻り> パブリック オブジェクトDeepCopy() { にBinaryFormatter bFormatter = 新たにBinaryFormatter()。 System.IO.MemoryStreamストリーム = 新しいのMemoryStream(); bFormatter.Serialize(流れ、この)。 stream.Seek(0 、SeekOrigin.Begin)。 リターン(InvoiceDetailResponse)bFormatter.Deserialize(ストリーム); } } /// <要約> /// 深拷贝接口 /// </要約> インターフェイスIDeepCopy { オブジェクトDeepCopy()。 } /// <要約> /// 浅拷贝接口 /// </要約> インターフェイスIShallowCopy { オブジェクトShallowCopy()。 }