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; } }
  • 相关阅读:
    [Linux起步]常用命令
    Eclipse被SD杂志评为最佳开源工具
    [一点一滴学英语]20050921
    [一点一滴学英语]20050920
    [一点一滴学英语]20050919
    Longhorn (Vista) 推迟发布的背后
    最快速度找到内存泄漏
    重载(overload)、覆盖(override)、隐藏(hide) 详解
    HTTP请求和响应格式
    Skia之四——SkGradientShader篇
  • 原文地址:https://www.cnblogs.com/shenchao/p/4121525.html
Copyright © 2011-2022 走看看