2016-09-20 108 views
0

我想知道如果我可以使用重寫方法動態添加屬性設置屬性。我想添加屬性的值(分數),以便最終獲得總分。從屬性動態添加值

這裏我的代碼

public abstract class player 
    { 
     public string nickName { get; set; } 


     public virtual int computeScore() 
     { 
      throw new NotImplementedException(); 
     } 
    } 

public class Bes : player 
    { 
     public int initScore =0; 

     public int score { get; set; } 
     public int ttlScore { get; set; } 


     public override int computeScore() 
     { 
      return this.ttlScore += this.score; 
     } 
    } 
+0

你的代碼有什麼問題?任何異常或意外行爲? – Peter

+0

每次我放置數據(bes1.score = 30)時,computeScore返回的值始終是最近輸入的值。我期待看到總分。 我試着輸入3個值。 bes1.score = 10; bes1.score = 20; bes1.score = 30; 總分是30; 我不知道我該怎麼做。 – KuysChan

+0

你應該做的是添加到分數,而不是分配給它。像'bes1.score = bes1.score + 10;' –

回答

0

這是值得懷疑的,想你想要做的是一個好主意。但事實是,它不是很清楚你想要做什麼什麼

我有一個模糊的含義,每次設置score屬性時,都要將該值添加到ttlScore屬性中。如果是這樣,那麼肯定......你可以這樣做,但這是一個可怕的想法。使用屬性來表示該操作將會非常混亂;相反,你應該有一種方法,例如名字爲AddScore(),所以很明顯,閱讀代碼時,每次將得分傳遞給方法時,它都會被添加到運行總數中。

例如,這樣的事情:

public class Bes : player 
{ 
    public int MostRecentScore { get; private set; } 
    public int TotalScore { get; private set; } 

    public int AddScore(int score) 
    { 
     this.MostRecentScore = score; 
     return this.TotalScore += score; 
    } 
} 

然後MostRecentScore屬性仍將顯示任何最新的比分,而TotalScore屬性將顯示正在運行的總,但類成員說清楚您必須致電AddScore()報告新的分數,並且這將負責更新兩個感興趣的屬性。

這個例子當然不使用代碼示例的virtual方面。從你的問題中不清楚爲什麼computescore()方法實際上是虛擬的,如果你真的想讓基類知道得分,那麼它可能不需要是—,那麼與得分相關的屬性也屬於此類,並且沒有一個成員需要成爲virtual —,所以我把它遺漏了。

如果這不能解決您的問題,請edit your question,以便更清楚您要做什麼。提供一個很好的Minimal, Complete, and Verifiable code example,它清楚地顯示了您嘗試過的內容,並詳細說明了代碼的作用以及您希望代碼執行的內容。

+0

謝謝! :)老實說,我真的不知道該問什麼。我只需要使用oop原則添加這些分數。 – KuysChan

+0

@KuysChan:_「我只需要使用oop原則添加這些分數」 - 這是一個非常模糊的要求。這是一個學校作業嗎?如果是這樣,那麼你最好的資源是你的老師。他們確切知道他們正在嘗試通過這個練習來教授什麼概念,並且可以幫助您理解作業和解決方案。程序可以通過許多不同的方式「使用面向對象的原則添加分數」。 –

+0

是的。無論如何,謝謝! – KuysChan