Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Унаследовать интерфейс от DisplayObject'a (http://www.flasher.ru/forum/showthread.php?t=205869)

Universe 26.12.2013 20:52

Унаследовать интерфейс от DisplayObject'a
 
Добрый день! У меня возник следующий вопрос:
есть 3 класса: Step1, Step2,Step3, которые наследуются от Sprite и при этом имплементят интерфейс, допусти IStep.
Создаю переменную step, тип данных у которой IStep.
Когда я пытаюсь добавить такой объект на экран - мне пишут ошибку
Код AS3:

35 Error: Implicit coercion of a value of type armor5.Tutorial:ITutorialStep to an unrelated type flash.display:DisplayObject.

Я конечно же могу написать step as DisplayObject, но чувствую что это неправильный подход. Как лучше решить эту проблему?

Dukobpa3 26.12.2013 21:06

Никак:)
Во флеше нету интерфейса дисплейобжектов.
Придумаешь грамотный велосипед - поделись. А так костыльных вариантов кучу видел, да и сам писал.
Один из них использовать не интерфейс IStep, а какой-то BaseStep extends DisplayObject. А потом от него наследоваться.

Universe 26.12.2013 21:14

Да уж...интересно, почему так получилось? Это провтык разработчиков или они специально так сделали?

Dukobpa3 26.12.2013 21:23

SlavaRa много тебе расскажет про это, если захочет. Холиворили уже с ним на эту тему.
Я считаю недоработкой разрабов. Он с пеной у рта доказывал что всё ок и так надо.
В чем-то он конечно прав, но думаю можно было что-то придумать.

Akopalipsis 26.12.2013 21:28

Объясните мне пожалуйста, в чем такая принципиальная разница, между интерфейсом и "абстрактным наследником" ?

Dukobpa3 26.12.2013 21:35

Akopalipsis
А если подумать и еще раз почитать вопрос в топике? :)

caseyryan 26.12.2013 22:02

Цитата:

Это провтык разработчиков или они специально так сделали?
Никакой это не провтык разработчиков. Все правильно сделано. Если бы можно было в дисплей лист толкать все что угодно, хоть Sound, какой толк был бы вообще в типизации?
Ну и что толку, если бы был интерфейс IDisplayObject? Все равно метод addChild принимает DisplayObject

Если это дисплей объект, то вполне нормальный подход писать as DisplayObject

Simplifier 26.12.2013 22:22

Цитата:

Ну и что толку, если бы был интерфейс IDisplayObject? Все равно метод addChild принимает DisplayObject
Если бы был интерфейс IDisplayObject, то его бы addChild и принимал, не?

maxkar 26.12.2013 22:50

Цитата:

Сообщение от Universe (Сообщение 1156013)
Как лучше решить эту проблему?

Вариант перейти от "IStep is-a DisplayObject" к "IStep has-a DisplayObject" рассматривали? Т.е. у вас будет
Код AS3:

interface IStep {
  //...
  function DisplayObject getUI();
}

Оно гораздо гибче в использовании (UI теперь можно кучей разных способов производить, а можно просто return this делать), да и идеологически более правильно.

caseyryan 27.12.2013 00:26

maxkar, неплохой вариант. Одна поправка к коду
Код AS3:

interface IStep {
  //...
  function getUI():DisplayObject;
}

;)


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

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