C#中的深度复制和浅度复制,请帮忙解惑,不要网上复制粘贴,最好有自己的见解+示例代码。

2025-03-26 04:31:51
推荐回答(1个)
回答1:

在C#中,对象的“复制”操作有三种:
1,引用
DemoClass dclass1=new DemoClass();
DemoClass dclass2=dclass1;
这仅仅引用了了对象dclass1,没有产生新的对象。
2,浅拷贝
DemoClass dclass3=dclass1.copy();
复制dclass1的除引用成员外的所有成员。即假设DemoClass类里有一个成员是
private AnotherClass aclass=new AnotherClass();
执行浅拷贝时,dclass3的aclass成员还是引用的dclass1的aclass.
3,深拷贝
这下你明白了,
DemoClass dclass4=dclass1.deepcopy();
dclass4会得到所有dclass1的引用成员和成员的副本。

注意,自己写的类,深拷贝函数需要自己写的,你可能会用到MemberwiseClone()(浅表副本拷贝)

哥从不复制粘贴,飘过。