c#淺複製與深複製

wisdomone1發表於2012-06-08
淺複製
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{


    class light : ICloneable
    {
        public int[] v ={ 1, 2, 3 };
        public object clone()
        {
            return this.MemberwiseClone();
        }


        public void display()
        {
            foreach (int i in v)
            {
                Console.WriteLine(i);

            }
        }


        #region ICloneable 成員

        public object Clone()
        {
            throw new Exception("The method or operation is not implemented.");
        }

        #endregion
    }
   
    //客戶端
    class Program
    {
       
        static void Main(string[] args)
        {
            light l1 = new light();
            light l1copy = (light)l1.clone();
            l1.v[0] = 8;
            l1copy.display();
            Console.ReadKey();
        }
        
    }


}


深複製




using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{


    public class light : ICloneable
    {
        public int[] v ={ 1, 2, 3 };

        //預設建構函式
        public light()
        {
        }

        //用於深複製與的私有建構函式
        private light(int[] v)
        {
            this.v =(int[])v.Clone();
        }

        public void display()
        {
            foreach (int i in v)
            {
                Console.WriteLine(i);

            }
        }


        #region ICloneable 成員

        public object Clone()
        {
            return new light(this.v);//此呼叫了上述的私有建構函式

            //throw new Exception("The method or operation is not implemented.");
        }

        #endregion
    }
   
    //客戶端
    class Program
    {
       
        static void Main(string[] args)
        {
            light l1 = new light();//先產生原型物件

            light l1copy = (light)l1.Clone();然後透過上述原型物件的clone方法會去呼叫私有建構函式進而複製l1為另一個新的物件
            l1.v[0] = 8;
            l1copy.display();
            Console.ReadKey();
        }
        
    }

}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-732313/,如需轉載,請註明出處,否則將追究法律責任。

相關文章