2016-09-20 1 views
0

Ich habe mich gefragt, ob ich Werte, die in der Eigenschaft gesetzt sind, mithilfe der Override-Methode dynamisch hinzufügen kann. Ich möchte die Werte (Bewertungen) aus den Eigenschaften hinzufügen, damit ich am Ende die Gesamtpunkte erhalten kann.Werte dynamisch aus der Eigenschaft hinzufügen

hier mein Code

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

Was ist das Problem mit Ihrem Code? Jede Ausnahme oder unerwartetes Verhalten? – Peter

+0

Jedes Mal, wenn ich Daten einlege (bes1.score = 30), ist der von computeScore zurückgegebene Wert immer der Wert, der kürzlich eingegeben wurde. Ich hatte erwartet, die Gesamtpunktzahl zu sehen. Ich habe es versucht, indem ich 3 Werte eingegeben habe. bes1.score = 10; bes1.score = 20; bes1.score = 30; Die Gesamtpunktzahl ist 30; Ich weiß nicht, was ich tun soll. – KuysChan

+0

Was Sie tun sollten, ist ADD in die Partitur, anstatt ihr zuzuordnen. Wie 'bes1.score = bes1.score + 10;' –

Antwort

0

Es ist zweifelhaft, dass wollen Sie tun möchten, ist eine gute Idee. Aber Tatsache ist, es ist nicht wirklich klar was Sie tun möchten.

Ich habe ein vages Gefühl, dass Sie wollen, jedes Mal, wenn die score Eigenschaft festgelegt ist, den Wert der ttlScore Eigenschaft hinzuzufügen. Wenn ja, dann sicher ... das kannst du, aber es ist eine schreckliche Idee. Die Verwendung einer Eigenschaft zur Darstellung dieser Operation wäre sehr verwirrend. stattdessen sollten Sie eine Methode, z. benannte AddScore(), so ist es klar, den Code zu lesen, dass jedes Mal, wenn ein Score an die Methode übergeben wird, wird es zur laufenden Summe hinzugefügt.

Zum Beispiel so etwas wie dieses:

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; 
    } 
} 

Dann wird die MostRecentScore Eigenschaft wird noch zeigen, was die jüngste Punktzahl wurde, während die TotalScore Eigenschaft wird die laufende Summe zeigen, aber die Klassenmitglieder machen deutlich, dass Sie müssen AddScore() anrufen, um eine neue Punktzahl zu melden, und das wird dafür sorgen, beide Eigenschaften von Interesse zu aktualisieren.

Dieses Beispiel verwendet natürlich nicht den virtual Aspekt Ihres Codebeispiels. Es ist nicht klar aus Ihrer Frage, warum die computescore() Methode wurde tatsächlich virtuell gemacht, und es muss wahrscheinlich nicht —, wenn Sie wirklich wollen, dass die Basisklasse über Scoring wissen, dann gehören die punktebezogenen Eigenschaften auch dort, und Keines der Mitglieder muss virtual — sein, also habe ich es weggelassen.

Wenn dies Ihre Frage nicht beantwortet, bitte edit your question, so dass es klarer ist, was Sie versuchen zu tun. Stellen Sie eine gute Minimal, Complete, and Verifiable code example bereit, die deutlich zeigt, was Sie versucht haben, zusammen mit einer detaillierten und spezifischen Erklärung, was der Code tut und was er stattdessen tun soll.

+0

Danke! :) Ehrlich gesagt, ich weiß wirklich nicht, was ich fragen soll. Ich musste diese Punkte nur mithilfe von OOP-Prinzipien hinzufügen. – KuysChan

+0

@KuysChan: _ "Ich musste diese Punkte nur mithilfe von OOP-Prinzipien hinzufügen" _ - das ist eine sehr vage Anforderung. Ist das für einen Schulauftrag? Wenn ja, dann ist deine beste Ressource dein Lehrer. Sie wissen genau, welches Konzept sie mit dieser Übung vermitteln wollen und können Ihnen helfen, sowohl die Aufgabe als auch ihre Lösung zu verstehen. Es gibt viele verschiedene Möglichkeiten, wie ein Programm "Punkte mithilfe von OOP-Prinzipien hinzufügen kann". –

+0

Ja ist es. Wie auch immer, danke! – KuysChan

Verwandte Themen