class City 
    {
       public int[] man=new int[2];
        public int population = 10;
       Country newCountry;       public City(Country newCountry)
       {
           this.newCountry = newCountry;
       }
                    public void Step()
        {
           man[0] = 10;
           population = 20;
        }
    }
 class Country:ICloneable
    {
        public City[] Cities;        public Country(int index)
        {
            Cities =new City[index];
        }        public object  Clone()
        {
            Country newCountry = new Country(this.Cities.Length);
            for (int i = 0; i < this.Cities.Length; i++)
            {
                newCountry .Cities[i]=this.Cities [i];            }
            return newCountry;
        }
    }
 class Program
    {
        static void Main(string[] args)
        {
            Country country1 = new Country(1);
            country1.Cities[0] = new City(country1 );
           
            Country tempCoutry;
            tempCoutry = (Country)country1.Clone();         
         
            tempCoutry.Cities[0].Step();
        }
    }
    //  tempCountry 变,  country1就变了, 搞不懂,等浅度复制时问题一致

解决方案 »

  1.   

    因为你的City 也是引用类型
      

  2.   


    class Country:ICloneable 

    public City[] Cities;  public Country(int index) 

    Cities =new City[index]; 
    }  public object  Clone() 
    {
    Country newCountry = new Country(this.Cities.Length); 
    for (int i = 0; i  < this.Cities.Length; i++) 
    {
    newCountry.Cities[i] = new City(this);
    newCountry.Cities[i].population = this.Cities [i].population;
    newCountry.Cities[i].man[0] = this.Cities[i].man[0];
    newCountry.Cities[i].man[1] = this.Cities[i].man[1];

    return newCountry;