这个是深拷贝还是浅拷贝

sunboyqq23 2010-09-13 08:49:08
public class Person
{
public Person(string fName, string lName)
{
this.firstName = fName;
this.lastName = lName;
}

public string firstName;
public string lastName;
}

public class People
{
private Person[] _people;
public People(Person[] pArray)
{
_people = new Person[pArray.Length];

for (int i = 0; i < pArray.Length; i++)
{
_people[i] = pArray[i];
}
}
}

在People类的构造函数中,使用new运算符分配了内存,不过数组中的元素是引用类型的,貌似对于整个数组,是深拷贝,但对于数组中的每个元素是浅拷贝?这样有什么意义吗,为什么不进行彻底的深拷贝呢,或者直接在构造函数中把参数pArray赋给引用_people呢
...全文
133 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dancingbit 2010-09-13
  • 打赏
  • 举报
回复
现在这样的做法,很容易转换为深拷贝,只需要Person实现一个Clone方法,然后在复制的时候,调用这个Clone方法。
dancingbit 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sunboyqq23 的回复:]
引用 1 楼 wuyq11 的回复:
浅拷贝使用Object类MemberwiseClone实现
MemberwiseClone:创建当前 Object 的浅表副本
浅拷贝(shallow copy)对于引用类型对象中的值类型字段进行了逐位复制。赋值运算符只是把源对象的引用赋值给目的对象,两者引用同一个对象。
浅拷贝后的对象的值类型字段更改不会反映到源对象,而赋值运算后的对象的值类型字段更……
[/Quote]
那就是引用同一个数组对象了。
sunboyqq23 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]
浅拷贝使用Object类MemberwiseClone实现
MemberwiseClone:创建当前 Object 的浅表副本
浅拷贝(shallow copy)对于引用类型对象中的值类型字段进行了逐位复制。赋值运算符只是把源对象的引用赋值给目的对象,两者引用同一个对象。
浅拷贝后的对象的值类型字段更改不会反映到源对象,而赋值运算后的对象的值类型字段更改会反映到源对象
[/Quote]为什么不直接在构造函数中把参数pArray赋给引用_people呢,和代码中的方式有什么区别吗
wuyq11 2010-09-13
  • 打赏
  • 举报
回复

浅拷贝使用Object类MemberwiseClone实现
MemberwiseClone:创建当前 Object 的浅表副本
浅拷贝(shallow copy)对于引用类型对象中的值类型字段进行了逐位复制。赋值运算符只是把源对象的引用赋值给目的对象,两者引用同一个对象。
浅拷贝后的对象的值类型字段更改不会反映到源对象,而赋值运算后的对象的值类型字段更改会反映到源对象

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧