それが何を意味するかの浅いコピーとディープコピーで最初の1文:
彼女はその後、それの2つの文を理解していなかったかのように。
まず、それがあるかどうかを深いまたは浅いコピーのコピーは参照オブジェクトのためのものである(詳細:https://www.cnblogs.com/personblog/p/11308831.html)
浅いコピー場合、オブジェクト参照でオブジェクトのコピーは、コピーされたオブジェクト(同じもの)への直接参照です。
ディープコピー場合は、オブジェクトの参照オブジェクトをコピーするには、新しいオブジェクトの新しいコピーにコピーされます。
オブジェクトの値を直接コピーされているので、なぜ、参照オブジェクトのためのものです。
直接バーコードの上には、問題の浅いコピーに対処する方法を見て。
UserDTO A = 新た UserDTO(){NAME = " イ"、ID = " 1 " }。 UserDTO B = 新しいUserDTO()。 B = 。 Console.WriteLineを(b.Equals(a)参照)。 Console.WriteLineを(" ----------- " ); b.Name = 「マック」。 Console.WriteLineを(a.Name)。
前記UserDTOは、2つのフィールドのみの名前とID、クラスであります
出力:
真
マック
示し、bが代わりに値型の、浅いコピー、クラスは参照型であるという理由で同じものであり、
どのように浅いこれまでの成果のディープコピーを作成したコピー?
三つの方法(:参照がありますhttps://www.cnblogs.com/TheBob/p/9414014.htmlは):
コードでは、これらの2つの方法があることができます:
// 方法一 公共 静的 ボイド DeepCopy <T>(Tの_raw、T _toObj)ここで、 T:クラス { タイプtype = _raw.GetType()。 物体 = O Activator.CreateInstance(タイプ)。 PropertyInfo [] PI = type.GetProperties()。 以下のために(INT iが= 0 ; I <PI.Length; I ++ ) { PropertyInfo P = PI [i]は、 P.SetValue(O、P.GetValue(_raw))。 } _toObj = OT。 リターン; } // 方法二 公共 静的 T DeepCopy <T> (Tの_raw) { タイプtype = _raw.GetType()。 物体 = O Activator.CreateInstance(タイプ)。 PropertyInfo [] PI = type.GetProperties()。 以下のために(INT iが= 0 ; I <PI.Length; I ++ ) { PropertyInfo P = PI [i]は、 P.SetValue(O、P.GetValue(_raw))。 } リターン(T)O。 }
状況を呼び出します:
UserDTO A = 新た UserDTO(){NAME = " イ"、ID = " 1 " }。 UserDTO B = 新しいUserDTO()。 B = 。 Console.WriteLineを(b.Equals(a)参照)。 // DeepCopy(B) B = DeepCopy()。 Console.WriteLineを(" ----------- " ); Console.WriteLineを(b.Equals(a)参照)。 b.Name = 「マック」。 Console.WriteLineを(a.Name)。
出力:
私たちは完了です。