在C#中,浅拷贝和深拷贝的主要区别在于它们处理对象内部成员的方式。
示例:
public class ShallowCopyExample
{
public int Id { get; set; }
public string Name { get; set; }
public List<string> Tags { get; set; }
}
// 浅拷贝
var original = new ShallowCopyExample { Id = 1, Name = "Original", Tags = new List<string> { "Tag1", "Tag2" } };
var copy = new ShallowCopyExample { Id = original.Id, Name = original.Name, Tags = original.Tags };
示例:
public class DeepCopyExample
{
public int Id { get; set; }
public string Name { get; set; }
public List<string> Tags { get; set; }
}
// 深拷贝
var original = new DeepCopyExample { Id = 1, Name = "Original", Tags = new List<string> { "Tag1", "Tag2" } };
var copy = new DeepCopyExample { Id = original.Id, Name = original.Name, Tags = new List<string>(original.Tags) };
总结:浅拷贝只复制对象的第一层属性,而深拷贝会递归地复制对象的所有层次属性。在实际应用中,根据需求选择合适的拷贝方式。如果对象内部没有引用类型的属性,或者不需要完全独立的副本,可以使用浅拷贝。如果对象内部有引用类型的属性,并且需要完全独立的副本,可以使用深拷贝。