2016-09-20 3 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

Смежные вопросы