中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

clone c#對象深拷貝怎樣實現

c#
小樊
93
2024-09-28 04:50:00
欄目: 編程語言

在C#中,要實現對象的深拷貝,你可以使用序列化和反序列化的方法。這種方法會創建一個新的對象,并將原始對象的所有屬性值復制到新對象中,包括嵌套的對象。以下是一個簡單的示例:

  1. 首先,確保你的類實現了Serializable接口。這個接口告訴C#編譯器該類的對象可以被序列化。
[Serializable]
public class MyClass
{
    public int Id { get; set; }
    public string Name { get; set; }
    public MyNestedClass NestedObject { get; set; }
}

[Serializable]
public class MyNestedClass
{
    public int NestedId { get; set; }
    public string NestedName { get; set; }
}
  1. 然后,使用BinaryFormatter類將對象序列化為字節數組,再將字節數組反序列化為新的對象。這樣就可以實現深拷貝了。
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

public class DeepCopyHelper
{
    public static T DeepCopy<T>(T obj) where T : Serializable
    {
        using (MemoryStream memoryStream = new MemoryStream())
        {
            BinaryFormatter binaryFormatter = new BinaryFormatter();
            binaryFormatter.Serialize(memoryStream, obj);

            memoryStream.Position = 0;
            T copiedObj = (T)binaryFormatter.Deserialize(memoryStream);
            return copiedObj;
        }
    }
}
  1. 使用DeepCopyHelper.DeepCopy()方法進行深拷貝。
public class Program
{
    public static void Main()
    {
        MyClass originalObject = new MyClass
        {
            Id = 1,
            Name = "Original",
            NestedObject = new MyNestedClass
            {
                NestedId = 1,
                NestedName = "Nested Original"
            }
        };

        MyClass copiedObject = DeepCopyHelper.DeepCopy(originalObject);

        Console.WriteLine("Original Object:");
        Console.WriteLine($"Id: {originalObject.Id}, Name: {originalObject.Name}, NestedObject.NestedId: {originalObject.NestedObject.NestedId}, NestedObject.NestedName: {originalObject.NestedObject.NestedName}");

        Console.WriteLine("\nCopied Object:");
        Console.WriteLine($"Id: {copiedObject.Id}, Name: {copiedObject.Name}, NestedObject.NestedId: {copiedObject.NestedObject.NestedId}, NestedObject.NestedName: {copiedObject.NestedObject.NestedName}");
    }
}

這個示例中,originalObjectcopiedObject是兩個完全獨立的對象,它們具有相同的屬性值。請注意,BinaryFormatter在.NET Core和.NET 5/6/7等后續版本中已被棄用,但在.NET Framework中仍然可用。如果你使用的是.NET Core或更高版本,可以考慮使用其他序列化庫,如Json.NET(現在叫Newtonsoft.Json)或System.Text.Json

0
蓬安县| 铜山县| 陈巴尔虎旗| 临邑县| 安丘市| 行唐县| 扎囊县| 长丰县| 琼结县| 高邮市| 得荣县| 芮城县| 上犹县| 吴堡县| 万全县| 克东县| 栾川县| 平南县| 万源市| 岚皋县| 昆明市| 三原县| 卢湾区| 涿州市| 长白| 钦州市| 新野县| 集贤县| 银川市| 进贤县| 翼城县| 潮安县| 南陵县| 枣阳市| 麻阳| 龙江县| 应城市| 呼伦贝尔市| 惠水县| 河北区| 句容市|