Этот вопрос звучит очень часто, но я понятия не имею, как его реализовать.Поделиться функциональностью между двумя классами
Мой сценарий:
Вопрос: Как реализовать DirectionTile
?
Поведение реализация DirectionTile
:
abstract class DirectionTile
{
public Point Direction;
public Tile Next => Board.GetTile(Coords + Direction);
}
Как вы можете видеть свойство Coords
будет от базового класса, который является Tile
(?).
Оба RailTile
и SailTile
являются DirectionTiles
. Тем не менее, я не могу просто наследовать от DirectionTile
, так как SailTile
необходимо наследовать от WaterTile
, и это приведет к 2 отношениям с Tile
(действительно, нужно использовать такой полиморфизм).
Я надеюсь, что кто-то может помочь мне с этой проблемой, которую я не могу решить. Дайте мне знать, если мои объяснения достаточно ясны.
Учитывая C# не имеет множественное наследование, использование " черты "или следующий лучший вариант: методы расширения. – CodeCaster
Стратегия может иметь смысл. Ваш метод execute() может быть просто «getNextTile()». – Tim
Вы должны взглянуть на [Компонентный движок игры] (http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/). В основном это подчеркивает, что использование традиционного наследования ООП может вызвать проблему архитектуры, например вашу. Вместо этого каждый «объект» в игре может представлять собой совокупность компонентов, позволяющих использовать кратные комбинации компонентов без общих корней. –