Проблема:Лучшая практика для рекурсивного класса
Я хочу построить класс для пользовательских dice
. Но он также должен обеспечить следующее:
- Каждый
side
может содержать другиеdice
- Число
sides
должно быть динамически расширяемый, но должен содержать по меньшей мере один- Логически
dice
нужно иметь acurrentSide
- Логически
- Каждый
side
имеетproperty
, что обеспечивает е содержание этой стороны (на D6, было бы"4"
)
До сих пор так хорошо, я пошел и сделал два класса dice
и side
и дал им свойства, я думаю, что они необходимы.
public class Side
{
//public bool HasDice { get { return Dice != null; } } - Removed not needed
public Dice Dice { get; set; }
public string Value { get; set; }
}
public class Dice
{
public ObservableCollection<Side> Sides { get; set; }
public string Name { get; set; }
public Side CurrentSide { get; set; }
}
Правильно ли, я никогда не делал рекурсивных занятий, поэтому я не уверен?
Также как я могу определить, являются ли те же кости и стороны «бесконечными», ссылаясь на них.
Как:
D1.CurrentSide = Side1; Side1.Dice = D1;
Должен ли я проверить это, когда строительные объекты?
Редактировать:
Если D1 рулоны S2, то D2, не должна быть развернута. Также
D2.Dice = Null
.Если D1 рулон S1, то D2 следует прокатывать.
Если D2 рулонах S1, то D3 следует прокатать.
- Если D2 рулонах S2, то D4 следует прокатать.
D3 и D4 не должны запускать ни один рулон.
Хорошая практика программирования в сторону, кто предложил этот дизайн? Публичное свойство говорит, если у стороны есть кости? Это ли для вас смысл? – walther
@walther Я планирую использовать это в WP-приложении вместе с WPF, и я думал, что bool в классе будет лучше связываться, а затем Dice Property of the Side и конвертер, чтобы получить булевское значение. Для простоты я вырезал реализацию INotifyPropertyChanged, потому что это не нужно, чтобы ответить на вопрос :) – Firen
http://memegenerator.net/instance/55596564 –