Как правильно передавать параметры из класса А в класс С через класс B? - C#
Формулировка задачи:
Всем привет! Пишу игру - Морской бой! Есть класс Game. Также есть класс Battlefield (модель поля, где корабли располагаются). Но нам нужно два таких поля - для себя и для второго игрока. Поэтому у меня есть класс BattlefieldController, в котором создаётся контейнер с двумя такими полями. Но вот в чём проблема. В Battlefield класс надо передать переменную, отвечающую за размер этого поля (10 на 10). Поскольку из класса Game я работаю с классом Battlefield непосредственно через класс BattlefieldController, то мне надо перередавать эту переменную размера именно в этот контроллер, хотя по сути самому контроллеру эта переменная не нужна. Вот пример:
Game.cs: BattlefieldController.cs: То есть переменная this.battlefieldsDimension нужна только для того чтобы один раз ее передать и мне это не очень нравится. Нормально ли это? Или лучше вызывать метод CreateBattlefieldsContainer() прямо из конструктора, что как бы тоже не очень нравится, если честно.
public Game(GameType gameType)
{
this.gameType = gameType;
ApplySettings();
}
private void ApplySettings()
{
switch (gameType)
{
case GameType.Russian:
Size battlefieldDimension = new Size(10, 10);
battlefieldController = new BattlefieldController(battlefieldDimension);
shipController = new ShipController(battlefieldDimension, 1, 2, 3, 4);
break;
default:
break;
}
}
public Grid GetBattlefields()
{
return battlefieldController.BattlefieldsContainer;
}public BattlefieldController(Size battlefieldDimension)
{
this.battlefieldsDimension = battlefieldDimension;
}
public Grid BattlefieldsContainer
{
get
{
return battlefieldsContainer ?? CreateBattlefieldsContainer();
}
private set
{
}
}
private Grid CreateBattlefieldsContainer()
{
создаю два экземпляра класса Battlefield (модель), используя battlefieldsDimension переменную.
}
У меня пришла одна идея. Может сделать наследование?
Решение задачи: «Как правильно передавать параметры из класса А в класс С через класс B?»
textual
Листинг программы
public Battlefield(string name, Size dimension)
{
Name = name;
Dimension = dimension;
StrokeThickness = 1;
StrokeColor = Colors.Black;
CreateGrid();
CreateBarIndexing();
CreateLegend();
}