zoukankan      html  css  js  c++  java
  • 关于C#的深拷贝

    简单点说:1.浅拷贝:就是把一个类型的所有字段的值都赋值一遍·值类型和引用类型的值都拷贝一份,引用类型的值为原对象引用所指向的地址,所以修改会把原来对象的引用指向值所改变。(string是特殊的类·当作值类型来使用 就是非引用类型)

    2.深拷贝:就是把引用类型所指向的类容也一起拷贝一份,修改起指向不会更改原来引用指向的值。

    这里就来说说深拷贝的实现方式:

    第一种就是序列化方法:可以继承ICloneable实现其接口Clone

    [Serializable]//如果不把CardData加上序列化标识则无法序列化

    public class CardData : ICardData , ICloneable
    {

    /// <summary>
    /// 深拷贝
    /// </summary>
    /// <returns></returns>
    public object Clone()
    {
    using(Stream objectStream = new MemoryStream())
    {
    IFormatter formatter = new BinaryFormatter();
    formatter.Serialize(objectStream, this);
    objectStream.Seek(0, SeekOrigin.Begin);
    return formatter.Deserialize(objectStream) as CardData;
    }
    }

    还有一种办法就写一个新的构造函数

    public CardData(ICardData card)
    {

    //依次赋值所有字段如果 字段很多的话就非常蛋疼

    }

  • 相关阅读:
    深入 kernel panic 流程【转】
    HDMI驱动热插拔检测方法
    WFE和WFI的区别
    SMP多核启动
    CPUFreq驱动
    DMA与cache一致性的问题
    深度理解select、poll和epoll
    Memory barrier 简介
    thinkphp的删除操作
    HOST文件配置
  • 原文地址:https://www.cnblogs.com/arthurwc/p/5007843.html
Copyright © 2011-2022 走看看