Показать сообщение отдельно
Старый 19.02.2013, 13:24
Фенёк вне форума Посмотреть профиль Отправить личное сообщение для Фенёк Найти все сообщения от Фенёк
  № 1  
Ответить с цитированием
Фенёк

Регистрация: May 2011
Сообщений: 221
Question Приведение Class к конкретному классу

Начал мучать еще один вопрос

Есть некий базовый класс BaseBuilding, у которого есть статический метод
Код AS3:
public static function getIcon():Sprite
который возвращает иконку строения. Каждый класс наследник соотвественно этот статический метод переписывает.

Дальше, есть класс BuildMenu, который показывает окошко с этими иконками строений. Для этого у него есть массив с классами конкретных построек (ConcreteBuilding1, ConcreteBuilding2, ... etc).
Код AS3:
private var buildings:Array = [
                                          ConcreteBuilding1,
                                          ConcreteBuilding2,
                                          //...
                                          ];
При формировании сетки с иконками происходит примерно следующее
Код AS3:
for(var i:int = 0; i < buildings.lenght; i++)
{
    var BuildingClass:Class = buildings[i];
    var buildingIcon:Sprite = BuildingClass.getIcon();
    //...
}
так вот, проблема в том, что оно то конечно все сработает, но при этом код является «ненадежным», потому что я не могу «гарантировать», что статический метод вызовется именно у класса наследника BaseBuilding.

Несколько слов о том, зачем это вообще мне надо.
-Во-первых это удобно, когда не нужно создавать для каждой иконки свой отдельный класс.
-Во-вторых, оттуда же, выбрав постройку, я могу отправить класс объекту, который будет создавать постройки на карте, например:

при клике на иконку:
Код AS3:
Ground.build(ConcreteBuilding1);
реализация:
Код AS3:
public static function build(BuildingClass:Class):void
{
   var building:BaseBuilding = new BuildingClass(param);
   //...
}
и опять таки здесь тоже было бы неплохо решить задачу о том, чтобы сделать указание на то, что класс должен быть наследником BaseBuilding, чтобы гарантировать, к примеру, возможность передачи ему в конструктор параметров.

Вобщем такой вот вопросец: возможно ли привести Class к типу BaseClass, так чтобы он продолжал быть обектом-классом? Или может быть вообще есть решение лучше чем заниматься такой морокой?