zoukankan      html  css  js  c++  java
  • C#Copy

    1、浅拷贝(值类型):

    public class LightCopy
        {
            public int Val
            {
                get;
                set;
            }
    
            public LightCopy(int ival)
            {
                Val = ival;
            }
    
            public object getCopy()
            {
                return MemberwiseClone();  //浅表副本
            }
        }

    测试代码及结果

                LightCopy lcopy = new LightCopy(8);
                MessageBox.Show("" + lcopy.Val);    //8
                LightCopy lcopy1 = (LightCopy)lcopy.getCopy();
                MessageBox.Show("" + lcopy1.Val);   //8
                lcopy1.Val = 3;
                MessageBox.Show("" + lcopy1.Val);   //3
                MessageBox.Show("" + lcopy.Val);    //8    

    2、浅拷贝(引用类型):

        public class Content
        {
            public int Val
            {
                get;
                set;
            }
        }
    
        public class LightCopy
        {
            public Content myContent; 
    
            public LightCopy(int val)
            {
                myContent = new Content();
                myContent.Val = val;
            }
    
            public object getCopy()
            {
                return MemberwiseClone();
            }
           
        }

    测试代码及结果

                LightCopy lcpy = new LightCopy(8);
                MessageBox.Show("" + lcpy.myContent.Val);    //8
                LightCopylcpy1 = (DeepCopy)lcpy.getCopy();
                MessageBox.Show("" + lcpy1.myContent.Val);   //8
                lcpy.myContent.Val = 3;
                MessageBox.Show("" + lcpy1.myContent.Val);   //3
                MessageBox.Show("" + lcpy.myContent.Val);    //3    

    3、深拷贝

            #region ICloneable 成员
    
            //如果类型继承自ICloneable,但是同时它不是一个Sealed类型的话,它们的子类的默认Clone方法会带来BUG(子类的Clone方法会返回父类的副本,而不是子类本身)。这会逼迫所有的子类都重写Clone方法;
            public object Clone()
            {
                //DeepCopy deepcpy = new DeepCopy(myContent.Val);
                return this.MemberwiseClone();//浅拷贝    
            }
    
            #endregion
    
           //深拷贝
    public DeepCopy DeepClone() { using (Stream objectStream = new MemoryStream()) { IFormatter formatter = new BinaryFormatter(); formatter.Serialize(objectStream, this); objectStream.Seek(0, SeekOrigin.Begin); return formatter.Deserialize(objectStream) as DeepCopy; } }
  • 相关阅读:
    Django和flask中使用原生SQL方法
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in
    Docker常用命令
    MySQL的压力测试
    使用docker-compose快速搭建PHP开发环境
    Docke如何配置Nginx和PHP
    Docker容器的重命名和自动重启
    docker部署MySQL、Redis和Nginx
    docker-compose的安装卸载以及如何使用
    docker如何制作自己的镜像
  • 原文地址:https://www.cnblogs.com/shenchao/p/4121525.html
Copyright © 2011-2022 走看看