![]() |
Возможно ли динамически наследовать классы
Допустим есть Json- объект, при его парсении вытаскиваю свойства рисуемых объектов, допустим свойство type, если type = 1, то наследовать DrawObject от Shape, если 2 , то от Sprite. Можно ли такое сделать?
|
Нет конечно, но ты можешь сделать фабрику инстансов классов, имплементирующих предопределенный интерфейс IDrawObject
|
Только в haxe и только при компиляции.
|
по моему при компиляции - это не динамически :)
Цитата:
Код AS3:
|
expl последняя строчка) на какой язык перешел?
|
на хороший
* Код AS3:
|
Цитата:
Чтобы не делать 2 класса DrawObjectShape и DrawObjectSprite , в которых будет одинаковый код |
Цитата:
Код AS3:
Код AS3:
Цитата:
Цитата:
Паттерном "фабричный метод" называют несколько другое: http://ru.wikipedia.org/wiki/%D0%A4%...D%D0%B8%D1%8F) Хотя здесь можно назвать Parser статической фабрикой, а newDisplayObject - методом статичной фабрики (просто названия совпадают паттерна и метода, хотя здесь ситуация совсем не похожа на фабричный метод - у нас тут никакие методы не перегружаются в подклассах, у нас тут вообще один класс и тот статичный, его, конечно, при необходимости, можно сделать нестатичным, тут не принципиально) P.S. Если вас напрягает добавление этих -2х строчек, у вас куча объектов со своими особенностями парсинга/перевода обратно в JSON и вы хотите более гибко добавлять эти объекты - могу подсказать как этого добиться с наследованием и прочими извращениями. Но если у вас 5 - 10 типов объектов, и добавление новых - редкость - решение с простыми функциями - самое лучшее. |
В любом случае Вы не можете наследоваться от нескольких/разных классов.
Можно заморочиться и заменить наследование композицией, но по-моему проще продублировать код, особенно если для Вас критична разница (по весу?) между Спрайтом и Шейпом (то какой-то еще экземпляр на борту это уж тем более перебор). |
| Часовой пояс GMT +4, время: 05:25. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.