Заголовок может нуждаться в небольшом объяснении, поэтому вот что я пытаюсь сделать:
- Общий базовый тип для элементов пользовательского интерфейса, например BasePanel
- Можно определить более специализированные элементы, полученные из BasePanel. Например, кнопки и текстовые поля.
- Будет сохранен список элементов (типа BasePanel, чтобы можно было хранить специализированные элементы)
- Этот список будет проходить через каждый кадр и рисоваться (без учета оптимизации на данный момент)
Пример использования:
class UIButton : BasePanel
{
public override void Draw(blah)
{
// Specialised drawing code
}
}
foreach (BasePanel Element in StoredElements)
{
Element.Draw(blah);
}
Проблема в том, что он не запускает специализированный код; он просто запустит код BasePanel.
Как я могу улучшить это, чтобы он вместо этого запускал специализированный код? Могу ли я сохранить тип элемента на BasePanel, а затем привести к нему во время выполнения?
Я пытался сохранить BasePanel в классе Container, в котором хранится исходный тип, но я не могу получить доступ к методу, например:
foreach(ElementContainer Container in StoredElements)
{
Type t = Container.OriginalType;
object el = Container.Element;
Convert.ChangeType(el, t); //Can't use the returned object!
t Element = (t)Convert.ChangeType(el, t); //This would be perfect, but it doesn't work.
}
Спасибо за любую помощь. Это заставило мой мозг взорваться.