C#深度拷贝和浅拷贝

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System;
using System.Net;
using System.Net.Sockets;
using System.Linq;
using DG.Tweening;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

public class Testsss : MonoBehaviour
{

    private void Awake()
    {
        Employee mike = new Employee() { IDCode = "NB123", Age = 30, Department = new Department { Name = "Dep1" } };
        Employee rose = mike.Clone() as Employee;
        print($"idcode = {rose.IDCode},age = {rose.Age},depa = {rose.Department.Name}");
        mike.IDCode = "NB456";mike.Age = 10; mike.Department.Name = "Dep2";
        print($"idcode = {rose.IDCode},age = {rose.Age},depa = {rose.Department.Name}");
    }
}

[Serializable]
class Employee:ICloneable
{
    public string IDCode { get;  set; }
  public int Age { get; set; }
    public Department Department { get; set; }

    #region 浅拷贝
    public object Clone()
    {
        return this.MemberwiseClone();
    }
    #endregion

    public Employee DeepClone()//深度拷贝
    {
        using (Stream objectStream = new MemoryStream())
        {
            IFormatter formatter = new BinaryFormatter();
            formatter.Serialize(objectStream, this);
            objectStream.Seek(0, SeekOrigin.Begin);
            return formatter.Deserialize(objectStream) as Employee;
        }
    }

    public Employee ShallowClone()
    {
        return Clone() as Employee;
    }
}
class Department
{
    public string Name { get; set; }
    public override string ToString()
    {
        return this.Name;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_41995872/article/details/106082550