深いと浅いコピーコピーのC#

それが何を意味するかの浅いコピーとディープコピーで最初の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)。            

出力:

 

 私たちは完了です。

おすすめ

転載: www.cnblogs.com/LeeSki/p/12162055.html