怎样做深度拷贝?

bryht 2010-11-16 03:36:32
引用类型赋值的时候老赋值引用,大侠们都是怎么深度拷贝的?
...全文
135 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bryht 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 whycom 的回复:]

手写
或者
可以通过反射
[/Quote]
反射怎么反?
bryht 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lunasea0_0 的回复:]

序列化,再反序列化 可行
不过需要注意的是不能Mark[NonSerialized] attribute,否则反序列化回来会挂。

实现ICloneable接口是最好的。
[/Quote]
怎么序列化的?有代码吗?
snowfirelove 2010-11-16
  • 打赏
  • 举报
回复
class Person
{
private string name;
private int age;

// Copy constructor.
public Person(Person previousPerson)
{
name = previousPerson.name;
age = previousPerson.age;
}

//// Alternate copy contructor calls the instance constructor.
//public Person(Person previousPerson)
// : this(previousPerson.name, previousPerson.age)
//{
//}

// Instance constructor.
public Person(string name, int age)
{
this.name = name;
this.age = age;
}

// Get accessor.
public string Details
{
get
{
return name + " is " + age.ToString();
}
}
}

class TestPerson
{
static void Main()
{
// Create a new person object.
Person person1 = new Person("George", 40);

// Create another new object, copying person1.
Person person2 = new Person(person1);
Console.WriteLine(person2.Details);

// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
// Output: George is 40
mohugomohu 2010-11-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 whycom 的回复:]

手写
或者
可以通过反射
[/Quote]
怎么弄啊?
lunasea0_0 2010-11-16
  • 打赏
  • 举报
回复
序列化,再反序列化 可行
不过需要注意的是不能Mark[NonSerialized] attribute,否则反序列化回来会挂。

实现ICloneable接口是最好的。
flyerwing 2010-11-16
  • 打赏
  • 举报
回复
写个复制构造函数用就OK了.
实现ICloneable接口估计成吧,麻烦.
colorall 2010-11-16
  • 打赏
  • 举报
回复
序列化,再反序列化
whycom 2010-11-16
  • 打赏
  • 举报
回复
手写
或者
可以通过反射
兔子-顾问 2010-11-16
  • 打赏
  • 举报
回复
引用类型如果自己写的就自己实现ICloneable接口,每个对象调用Clone复制,反之只能手工复制,一个一个属性的复制。

111,129

社区成员

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

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

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