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; } }
  • 相关阅读:
    锐捷交换机密码恢复
    adobe cs3系列产品官方帮助网页(中文)
    网页设计视频教程
    锐捷交换机、路由器配置手册
    WINPE下如何直接删除联想隐藏分区?
    IWMS实现频道页面的方法
    SATA、SCSI、SAS区别与特点
    自定义系统必备
    自己写的Web服务器
    尝试MVP模式
  • 原文地址:https://www.cnblogs.com/shenchao/p/4121525.html
Copyright © 2011-2022 走看看