Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Приведение Class к конкретному классу (http://www.flasher.ru/forum/showthread.php?t=194636)

Фенёк 19.02.2013 13:24

Приведение 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, так чтобы он продолжал быть обектом-классом? Или может быть вообще есть решение лучше чем заниматься такой морокой?

cleptoman 20.02.2013 13:14

что такое у вас ConcreteBuilding1 etc?
почему нельзя работать на уровне экземпляров, а не классов?
сделайте модельки ваших строений. которые содержат ссылки на нужные вам данные..тип модели в этом случае будет всего один и ничего ни к чему приводить не надо будет.

Wolsh 20.02.2013 15:59

Какую тему закрыть, эту или эту?

yasha005 20.02.2013 17:57

Цитата:

Сообщение от Wolsh (Сообщение 1121474)
Какую тему закрыть, эту или эту?

обе закрывайте, не ошибётесь. Всёравно ни в одной из них ничего интересного почитать нету

Фенёк 21.02.2013 21:49

Извиняюсь за задержку, закрывайте эту, ту еще сейчас почитаю )


Часовой пояс GMT +4, время: 06:24.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.