class Country
    {
        public City[] Cities;        public Country(int index)
        {
            Cities =new City[index];
        }
    }
class City
    {
       public int[] man=new int[2];
       public int population;
       Country newCountry;//= Country();        public City(Country newCountry)
        {
            this.newCountry = newCountry;
        }        public object Clone()
        {
            return MemberwiseClone();
        }        public void Step()
        {
           man[0] = 10;
           population=20;
        }
    } class Program
    {
        static void Main(string[] args)
        {
            Country country1 = new Country(1);
            country1.Cities[0] = new City(country1 );
            country1.Cities[0].population = 10;            City city2;
            city2 = (City)country1.Cities[0].Clone();
            city2.Step();
        }
    }
step()后, 
city2.population=10,city2.man[0]=10,
country1.cities[0].population=10,  country1.cities[0].man[0]=10跟着变了。
怎么修改复制。谢谢。

解决方案 »

  1.   

    class City:ICloneable
    {
        public int[] man = new int[2];
        public int population;
        Country newCountry;//= Country();     public City(Country newCountry)
        {
            this.newCountry = newCountry;
        }    public void Step()
        {
            man[0] = 10;
            population = 20;
        }    #region ICloneable 成员    public object Clone()
        {
            City newCity = new City(this.newCountry);
            for(int i = 0; i < this.man.Length; i++)
            {
                newCity.man[i] = this.man[i];
            }
            newCity.population = this.population;
            return newCity;
        }    #endregion
    }
      

  2.   

    谢谢ls, 想问下刚才浅度的复制,为什么原来只是man[]变化了,population却没有被修改?