急!急! C# 深度复制问题!【谁能帮我???】

zd0451 2008-05-14 10:53:42
现在做个东西涉及到一个很复杂的类
一个类里包含其他类以及结构,结构又包含引用类型,怎样实现深度复制呢??
比如类A,怎样进行深度复制呢
class A
{
private B b; // B是个结构
private C c; // C是个类
}

struct B
{
public string str;//引用类型
public D d; //D也是结构
}
...全文
506 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
book_keke86 2011-11-02
  • 打赏
  • 举报
回复
8楼正解...
burnschow 2010-09-02
  • 打赏
  • 举报
回复
来学习来了....
zd0451 2008-05-15
  • 打赏
  • 举报
回复
多谢大哥们!
caicai_45 2008-05-14
  • 打赏
  • 举报
回复
用序列化,再反序列化,能得到深度拷贝
onthebox 2008-05-14
  • 打赏
  • 举报
回复
struct B
{
public string str;
public D d;

public B Clone()
{
B b=new B();
b.str=this.str;
b.d=this.d;

return b;
}
}


class A
{
private B b; // B是个结构
private C c; // C是个类

public A Clone()
{
A a=new A();
a.b=this.b.Clone();
a.c=this.c.Clone();

return a;
}

}

yuanmanguo 2008-05-14
  • 打赏
  • 举报
回复
up
virusswb 2008-05-14
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication27
{

public class A : ICloneable
{
public A() { }
private int i;
public int I
{
get { return this.i; }
set { this.i = value; }
}
public object Clone()
{
return new A();
}
}


class Program
{
static void Main(string[] args)
{
A a = new A();
a.I = 10;
Console.WriteLine("a.i=" + a.I);
A aa =(A) a.Clone();
aa.I = 20;
Console.WriteLine("a.i=" + a.I);
Console.WriteLine("aa.i=" + aa.I);

Console.ReadLine();
}
}
}
onthebox 2008-05-14
  • 打赏
  • 举报
回复
这个要自己写……
比如A类中的C类
再C中一定要有
深拷贝的方法
然后调用A拷贝方法中,一定要包含C的拷贝方法
所谓的深拷贝,其实就是值类型的复制
因为只有值类型才能再传值的时候申请一个内存
再有,string虽然是引用类型,但是其用法就是值类型
happyboxman 2008-05-14
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20071210/10/28723408-cad5-4cdd-ae97-5b60ab96d49d.html
搞深层克隆别用这么麻烦的东西了,直接用System.Xml.Serialization.XmlSerializer进行序列化和反序列化就可以得到一个完全深层克隆的对象.
此方法甚至可以克隆出单件
本论坛出现过的。。。看看有用否。。。
happyboxman 2008-05-14
  • 打赏
  • 举报
回复
http://www.codeproject.com/KB/cs/cloneimpl_class.aspx
看看有用否

Clone 既可作为深层副本实现,也可作为浅表副本实现。在深层副本中,所有的对象都是重复的;而在浅表副本中,只有顶级对象是重复的,并且顶级以下的对象包含引用。

结果克隆必须与原始实例具有相同的类型或是原始实例的兼容类型。
hanjun1024 2008-05-14
  • 打赏
  • 举报
回复
ICloneable接口不是每个类型都会实现的,但是每个对象都有一个受保护的MemberwiseClone方法。也就是说对于值类型会完全复制,对于引用类型则只复制引用。要实现深度复制,里面的类型都需要有一些你自己的实现。思路是这样的,递归遍历你自己对象里的每个对象,如果支持ICloneable就调用它,如果不支持就调用MemberwiseClone,一直往下。
hwk5 2008-05-14
  • 打赏
  • 举报
回复
一个个进行赋值吧.
yilanwuyu123 2008-05-14
  • 打赏
  • 举报
回复
MARK
zd0451 2008-05-14
  • 打赏
  • 举报
回复
就是clone()
实现那个ICloneable
ericzhangbo1982111 2008-05-14
  • 打赏
  • 举报
回复
复制??
什么意思
yagebu1983 2008-05-14
  • 打赏
  • 举报
回复
帮你顶!!
我也第一次看到这样的问题!!
关注!!
zd0451 2008-05-14
  • 打赏
  • 举报
回复
也就是说,怎样复制带引用类型的结构
各位大哥帮帮小弟,很着急的!

110,536

社区成员

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

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

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