C#对象深克隆例子

+展开
-C#
//第一步,新建一个可序列化的类,用于这个对象的克隆操作

[System.Serializable]
class TestA
{
    public int[] aaa ={0,0,0 };
    public object GetClone(object obj)
    { 
        using(System.IO.MemoryStream sm=new System.IO.MemoryStream())
        {
            System.Runtime.Serialization.Formatters.Binary.BinaryFormatter binaryformatter =
                new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            binaryformatter.Serialize(sm, obj);
            sm.Seek(0, System.IO.SeekOrigin.Begin);
            object ob = binaryformatter.Deserialize(sm);
            return ob;
        }
    }

    public object GetClone2(object o)
    {
        return this.MemberwiseClone();
    }
}


//第二步,开始测试深克隆与浅克隆的区别(浅克隆不可以创建出新的引用,深克隆则相反)
class program
{
    static void Main()
    {
        TestA a = new TestA();
        TestA b = (TestA)a.GetClone(a);
        a.aaa[0] = 123;
        b.aaa[0] = 222;
        System.Console.WriteLine(a.aaa[0]);
        System.Console.WriteLine(b.aaa[0]);
        System.Console.WriteLine("___________________________");
        TestA a1 = new TestA();
        TestA b1 = (TestA)a1.GetClone2(a);
        a1.aaa[0] = 333;
        b1.aaa[0] = 444;
        System.Console.WriteLine(a1.aaa[0]);
        System.Console.WriteLine(b1.aaa[0]);

        System.Console.ReadLine();
    }
}

来源:http://2sws.blog.163.com/blog/static/1791024920098434454449/

加支付宝好友偷能量挖...


评论(0)网络
阅读(83)喜欢(0)Asp.Net/C#/WCF