C# 引用类型的对象克隆(深拷贝)。

时间:2021-12-19 19:54:13

首先输出的是多少?

    class Program
    {
        static void Main(string[] args)
        {
            Test a = new Test()
            {
                Age =12,
                Name= "aaa"
            };
            Test b = a;
             b.Name ="bbb";
            Console.WriteLine(a.Name);
            Console.ReadKey();
        }
    }    
    class Test
    {
        public int Age { get; set; }
        public string  Name { get; set; }
    }

应该是bbb,个人理解是因为是引用类型的缘故,指针指向了b,所以输出的是bbb。

如果要 有一个b,它和a的内容完全一样,a的值不变。

大体有三种方法:

1,一个一个属性的赋值。

2,用struct 代替class.

3,用反射加泛型实现深拷贝。

        /* 利用反射实现深拷贝*/
        public static object DeepCopy(object _object)
        {
            Type T = _object.GetType();
            object o = Activator.CreateInstance(T);
            PropertyInfo[] PI = T.GetProperties();
            for (int i = 0; i < PI.Length; i++)
            {
                PropertyInfo P = PI[i];
                P.SetValue(o, P.GetValue(_object));
            }
            return o;
        }
    }

使用的时候 Test b = (Test)DeepCopy(a);