类使用相同的内存位置多次实例化

时间:2018-05-21 00:57:42

标签: c# instantiation

我很难找到解决方案,因为它难以用可评论的术语描述。

我有一个我多次实例化的课程。我正在单独修改每一个,但他们都收到了相同的变化。

我有一个名为Game的课程。游戏有一个玩家卡列表,其中包含单个游戏实例的根对象的大小为0。 在游戏中,我有一个克隆功能,可以复制整个游戏状态,包括玩家卡片。

public Game Clone()
{
    return new Game(playerCards, ........);
}

在我的根对象中,我想生成Game当前状态的多个副本,每个副本略有不同。

我每次使用不同的卡多次调用以下内容:

Game g = game.Clone();
g.AddPlayerCard(card);
DecisionBranch b = new DecisionBranch(g);
Branches.Add(b);

DecisionBranch是根对象的类型,因此我创建了更多包含已修改游戏的对象。然后我将额外的分支添加到根对象中的列表中。

我已经简化了一些事情,因为周围还有其他代码等,但这应该证明我在做什么/问题。

我正在调用该代码13次,并且根对象中的每个对象都有一个相同的游戏,其中13个卡已添加到每个游戏中。所以Game I的新实例似乎正在使用旧实例?

它是否使用相同的内存位置,因此有点复制?

修改

以下是我正在使用的代码。以上是我现在遇到的问题/关注点。

在DecisionBranch中,我称之为:

private void DealEachCardToPlayer()
{
    DealCardToPlayer(shoe.Twos, "2");
    DealCardToPlayer(shoe.Threes, "3");
    DealCardToPlayer(shoe.Fours, "4");
    DealCardToPlayer(shoe.Fives, "5");
    DealCardToPlayer(shoe.Sixes, "6");
    DealCardToPlayer(shoe.Sevens, "7");
    DealCardToPlayer(shoe.Eights, "8");
    DealCardToPlayer(shoe.Nines, "9");
    DealCardToPlayer(shoe.Tens, "T");
    DealCardToPlayer(shoe.Jacks, "J");
    DealCardToPlayer(shoe.Queens, "Q");
    DealCardToPlayer(shoe.Kings, "K");
    DealCardToPlayer(shoe.Aces, "A");
}

private void DealCardToPlayer(int cardsAvailableInShoe, string card)
{
    if (cardsAvailableInShoe > 0)
    {
        Shoe s = shoe.Clone();
        Game g = Game.Clone(game);
        s.DeadCard(card);
        g.AddPlayerCard(card);
        DecisionBranch b = new DecisionBranch(Path + card, (float)cardsAvailableInShoe / (float)shoe.TotalCards, s, g);
        Branches.Add(b);
    }
}

它正在克服当前决策分支的游戏和鞋子,更换鞋子和游戏中的牌,并创建一个新的决策分支,传递新的鞋子和游戏。

这是我克隆游戏的地方。以同样的方式克隆鞋子。

public Game Clone(Game game)
{
    return new Game(game.playerCards, game.dealerCards, game.playerHasStood, game.playerHasSplit, game.playerHasDoubled);
}

在创建的每个DecisionBranch(附加13)中,他们然后将卡交给经销商,使用几乎相同的代码只更改了几个关键部分(应该是显而易见的)。对于所有创建的169个DecisionBranches,它会创建另外13个决策分支,再次向玩家发牌。

0 个答案:

没有答案