2015-08-31 120 views
2

道歉對於真正糟糕的標題,但我不太確定如何更好地表達它。我正在創建一個相當簡單的程序,只是爲了玩弄C#中的繼承,涉及對玩家發牌。我在想,最好的辦法是什麼,有什麼區別,分配一個手一個球員的這兩種方式之間:調用方法vs將對象分配給方法AND void返回類型vs對象返回類型

在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'是什麼區別?即:

,然後做:

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

它仍然似乎我期望的工作,並卡正確地分配給玩家。

感謝您的任何意見/建議! FYP

+0

取代傑克關於第二部分,它是唯一有用的離開'返回this'如果你打算使用[鏈式方法調用(HTTP:// stackoverflow.com/questions/1119799/method-chaining-in-c-sharp) – Kilazur

回答

3

這是沒用的:players[i] = players[i].takeHand(hands[i]);:你不需要修改播放器,只需要修改播放器,但只需要修改播放器hand。正確的是:


因爲,IRL,當你交易的卡,你不改變整個播放器吧?你只需更換他們手中的牌。

這裏是一樣的,你每次交易時都不需要改變player[i]。此外,你回來this是這樣寫我與傑克

+0

太好了,謝謝 - 我認爲這種情況,但我似乎總是最終使用「無效」返回類型的很多我的方法這感覺不是面向對象的。 – fypfyp

+0

@fypfyp也許你可以接受答案:) –