91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

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
同德县| 淮南市| 行唐县| 田东县| 高台县| 鹤山市| 宝坻区| 天峨县| 海淀区| 徐闻县| 临沧市| 鄂伦春自治旗| 镇原县| 洪雅县| 喀喇| 枣强县| 克什克腾旗| 清远市| 定西市| 清水河县| 新建县| 永嘉县| 新民市| 望江县| 东港市| 琼结县| 德庆县| 平阳县| 安平县| 龙陵县| 岱山县| 社会| 随州市| 安图县| 玉门市| 保康县| 探索| 杨浦区| 龙门县| 军事| 海城市|