调用方法vs将对象赋值给方法AND void返回类型vs对象返回类型

时间:2015-08-31 12:30:23

标签: c# object inheritance methods reference

为真正糟糕的标题道歉,但我不太清楚如何更好地表达它。我正在创建一个相当简单的程序,只是为了在C#中使用继承,包括向玩家发牌。我想知道最好的方法是什么,以及在给玩家分配这两种方式之间的区别是什么:

在Player类中:

public Player takeHand(List<Card> cards)
{
    this.hand = cards;
    return this;
}

然后在“众议院”级别(即经销商/主要班级)内,循环播放玩家并出售卡片:

List<Player> players = new List<Player>() {new Player.. new Player..};
List<List<Card>> hands;

for (int i = 0; i < players.count; i++)
{
    hands.Add(new List<Card>());
    for (int j = 0; j < cardsToDeal; j++)
    {
        hands[i].Add(dealCard());
    }
    players[i].takeHand(hands[i]); // correct?
    players[i] = players[i].takeHand(hands[i]); // correct?
}

我的第一个问题是调用方法'takeHand'的正确方法是什么?他们似乎都工作相同。

我的第二个问题是,然后让“takeHand”方法改为“void”,然后不返回'this',有什么不同?即:

public void takeHand(List<Card> cards)
{
    this.hand = cards;
}

然后做:

players[i].takeHand(hands[i]);

它似乎仍然像我期望的那样工作,并且正确地将牌分配给玩家。

感谢您的任何意见/建议! FYP

1 个答案:

答案 0 :(得分:3)

这没用:players[i] = players[i].takeHand(hands[i]);:您不需要修改播放器,只需要修改hand。正确的是:

public void takeHand(List<Card> cards)
{
    this.hand = cards;
}

因为,IRL,当你交易卡时,你不能改变整个玩家吗?你只需要更换他们手中的卡片。

这里也是一样,每次交易时都不需要更改player[i]。此外,您正在返回this,这就像写我用杰克替换杰克