在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) };
總結:淺拷貝只復制對象的第一層屬性,而深拷貝會遞歸地復制對象的所有層次屬性。在實際應用中,根據需求選擇合適的拷貝方式。如果對象內部沒有引用類型的屬性,或者不需要完全獨立的副本,可以使用淺拷貝。如果對象內部有引用類型的屬性,并且需要完全獨立的副本,可以使用深拷貝。