浅复制和深复制
浅复制(Shallow Copy)和深复制(Deep Copy)是在编程中用于复制对象的两种方式。浅复制复制的是对象的引用(指针),而深复制则复制对象的实际值。
在.NET中,浅复制可以通过MemberwiseClone
方法实现,而深复制则需要自己定义复制逻辑,手动复制对象的字段。
示例代码
public class MyObject : ICloneable
{
public int Value { get; set; }
// 浅复制
public object ShallowCopy()
{
return this.MemberwiseClone();
}
// 深复制
public object DeepCopy()
{
return new MyObject { Value = this.Value };
}
}
class Program
{
static void Main(string[] args)
{
MyObject original = new MyObject { Value = 5 };
// 浅复制
MyObject shallowCopy = (MyObject)original.ShallowCopy();
// 深复制
MyObject deepCopy = (MyObject)original.DeepCopy();
// 修改原始对象的值,看看浅复制和深复制的对象是否受影响
original.Value = 10;
Console.WriteLine($"Original: {original.Value}");
Console.WriteLine($"Shallow Copy: {shallowCopy.Value}");
Console.WriteLine($"Deep Copy: {deepCopy.Value}");
// 输出结果将显示浅复制的对象的值也被修改了,而深复制的对象的值未改变
}
}
在这个例子中,MyObject
类实现了ICloneable
接口,并提供了ShallowCopy
和DeepCopy
方法。ShallowCopy
方法使用了MemberwiseClone
,而DeepCopy
方法则是通过创建一个新实例并复制每个字段来实现深复制。
当你修改原始对象的Value
属性时,浅复制的对象会反映这个改变,而深复制的对象则保持原样。这展示了浅复制和深复制的区别。
这种创建对象的方式,也是设计模式中-原型模式的一种实现:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
标签:MyObject,对象,Value,ShallowCopy,复制,NET,original From: https://www.cnblogs.com/cqai/p/18222933