我在City类中有这个方法。它应该创建一个基于对象的一个新的城市,该方法适用于:对“this”修饰符有问题
public City newCity(string newCityName, int dX, int dY)
{
City c=new City(this); //based on a constructor : City(City c){}
c.CityName=newCityName;
c.NoOfNeighborhoods=1;
c.NumOfResidents=0;
c.CityCenter.Move(dX,dY);
return c;
}
的CityCenter的类型是“点”,它有两个领域 - X,Y。 Point类中的Move方法有助于更改CityCenter的位置。它看起来像这样:
public void Move(int dX, int dY)
{
this.X = x + dX;
this.Y = y + dY;
}
会发生什么是新对象c和现有城市对象都被更改。我认为“this”修饰符也适用于现有对象...
如何利用Move方法而不引起此行为? 注意:这是一个封闭的API,所以我只能将私有方法添加到项目中。
浅拷贝,也许? – 2010-05-18 16:43:49
这可能有助于将代码发布在城市(城市c){}' – 2010-05-18 16:44:46
您可以发布“City(City c)'构造函数的代码吗?我怀疑它创建了一个浅拷贝,所以'CityCenter'属性指向相同的'Point'实例。 – dtb 2010-05-18 16:46:28