2016-05-30 3 views
0

У меня есть не абстрактный класс, называемый «Player», и абстрактный класс под названием «Оценка» с подклассом «Комбинация». Внутри Комбинации есть и абстрактный метод, используемый в других подклассах.Как назвать абстрактный класс от не-родителя

Как я могу назвать свой абстрактный метод из не-родительского метода «Player», не делая его статическим?

// This is the abstract method within Combination, 
// it uses the face values from rolled dice to calculate the score. 

abstract public int CalculateScore(int[] faceValues); 

//Array of 'Score's in Player 

private Score[] scores = new Score[10]; 
+0

Дополнительная информация о игрока и классе комбинации вы можете получить? Что значит faceValues? – Silvinus

ответ

0

Вы не можете. Это модификатор доступа, и он был разработан для ограниченного доступа к классу. Чтобы использовать его в вашем случае, я предлагаю изменить доступность от abstract до public класса Score.

0

Если вы правильно поняли, вы хотите реализовать CalculateScore в своем производном классе, обратившись к полю scores?

Простой ответ: вы не можете, как вы его разработали. private, убедитесь, что только ваш собственный класс может получить доступ к полю. Если вы хотите, чтобы производные классы имели доступ к этому полю, вы должны изменить свой модификатор на protected на поле scores.

Если вы не хотите, чтобы ваши производные классы, чтобы иметь доступ к scores напрямую, вы должны реализовать методы, по крайней мере protected доступа, что изменить scores -поле определенным образом, в базовом классе.

0

Так ваша ситуация:

  • Player является нормальным classs
  • Score является абстрактным классом
  • Combination является абстрактным классом также, что подклассы Score. Он содержит абстрактный метод CalculateScore, который вы хотите вызвать изнутри класса Player.
  • Player имеет массив Score s

Вы можете проверить, если элемент в вашем Score массиве типа Combination затем брось.

if(score[0] is Combination) 
{ 
    (score[0] as Combination).CalculateScore(/* arguments here */); 
} 

Возможно, вам придется переосмыслить, как работают ваши классы. ИМХО, Игрок не должен рассчитывать счет. Возможно, для этого нужно использовать ScoreCalculatorService.