На этот раз у меня проблема с виртуальными полями.
У меня есть базовый класс для моих игровых объектов. Этот класс содержит поле с объектом класса Model. Объект модели содержит такие значения, как положение и т. Д.
Теперь - во время рисования мне нужно прочитать положение каждого объекта из его модели. Проблема начинается, когда вместо класса модели по умолчанию я использую производную. Пример:
abstract class GenericGameObject { public DefaultGameObjectModel Model = new DefaultGameObjectModel(); }
class Plane : GenericGameObject { public void shoot(Missile m){ m.Model.Position.X = 10; } }
class Missile : GenericGameObject { public new MissileModel Model = new MissileModel(); }
class DefaultGameObjectModel { public Vector2 Position = new Vector2(){X=0}; }
class MissileModel : DefaultGameObjectModel { }
Plane p = new Plane();
Missile m = new Missile();
p.shoot(m);
// NOT OK! ((GenericGameObject)m).Model.Position.X == 0
Я пытался сделать Модель определяемой как виртуальное свойство вместо поля, но это не удалось, потому что
производные свойства должны быть того же типа, что и их база. Кастинг бесполезен, потому что будет много других типов моделей. Что я могу сделать, если я хочу прочитать значение из производного класса, а не из базы?