亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

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
闽侯县| 定边县| 广州市| 甘洛县| 长海县| 汽车| 巨鹿县| 三都| 太保市| 堆龙德庆县| 保亭| 揭东县| 石狮市| 山东| 临湘市| 开化县| 光山县| 西藏| 浦东新区| 库车县| 天镇县| 浦县| 贵南县| 徐汇区| 泌阳县| 巴塘县| 临夏市| 巴马| 常山县| 额济纳旗| 祁东县| 政和县| 修水县| 阳高县| 裕民县| 万山特区| 惠州市| 应城市| 葫芦岛市| 芮城县| 丰城市|