C# 引用类型的对象克隆(深拷贝)。
首先输出的是多少?
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);