【问题标题】:Calling method vs assigning object to method AND void return type vs object return type调用方法与将对象分配给方法和 void 返回类型与对象返回类型
【发布时间】:2015-11-25 11:48:29
【问题描述】:

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

在 Player 类中:

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

然后在“House”类(即庄家/主类)中,循环播放玩家并发牌:

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]);

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

感谢任何 cmets/建议! 元年

【问题讨论】:

  • 关于第二部分,如果您打算使用method-chaining,请离开return this 有用

标签: c# object inheritance methods reference


【解决方案1】:

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

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

因为,IRL,当你发牌时,你不会改变整个玩家,对吧?您只需更改他们手中的卡片即可。

这里也一样,每次交易都不需要换player[i]。此外,您正在返回 this,这就像在写 I replace Jack with Jack

【讨论】:

  • 太好了,谢谢 - 我认为是这种情况,但我似乎总是倾向于在我的许多感觉非面向对象的方法中使用“void”返回类型。
猜你喜欢
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多