我有一堂课叫董事会。它具有多个列,您可以通过调用AddStoneToColumn(column c)将Stones添加到列中。该方法不应该修改对象本身,而只能使用添加的石头创建一个新的Board Object,但是它也会以某种方式不断改变自身。
这里是我的相关代码:
public Board AddStoneToColumn(int column)
{
Board resultBoard = new Board(this);
Boolean isPlaced = false;
for (int i = 0; i < height; i++)
{
if (resultBoard.GetStone(column, i) == StoneEnum.EMPTY)
{
resultBoard.SetExactCoords(column, i, turn);
isPlaced = true;
break;
}
}
if (!isPlaced)
{
throw new InvalidOperationException("Spalte voll");
}
if (turn == StoneEnum.BLUE)
resultBoard.turn = StoneEnum.RED;
if (turn == StoneEnum.RED)
resultBoard.turn = StoneEnum.BLUE;
return resultBoard;
}
private void SetExactCoords(int x, int y, StoneEnum stone)
{
if (stone == StoneEnum.EMPTY)
throw new NotSupportedException("Empty stone ??");
this.stones[x, y] = stone;
}
public Board(Board board)
{
this.stones = board.stones;
this.turn = board.turn;
}
答案 0 :(得分:3)
您仅在克隆构造函数中复制引用,而不创建数据副本。您将不得不复制这些数组/集合。
答案 1 :(得分:0)