Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как вызвать свой метод не приводя к типу (http://www.flasher.ru/forum/showthread.php?t=151632)

mechman 03.03.2011 07:34

Как вызвать свой метод не приводя к типу
 
Здравствуйте, коллеги по цеху!

Есть менеджер объектов. На вход ему подаётся ссылка на объект.
Подаваемые объекты экземпляры разных классов, но в любом случае эти классы расширяют (extends) Sprite.

Менеджер должен в каждом объекте в процессе работы с ним запускать метод.
Делаю так: currentPage.setPause(true);
(currentPage - ссылка на объект).

Но конечно ругается FlashDevelop:
Error: Call to a possibly undefined method setPause through a reference with static type flash.display:DisplayObject.

Всегда в таком случае привожу к типу: (currentPage as SimplePage).setPause(true);
Но в этом случае объект может быть нескольких типов.

Уважаемые, подскажите изящное решение. Нет желания огород городить.

alatar 03.03.2011 08:27

Цитата:

Всегда в таком случае привожу к типу: (currentPage as SimplePage).setPause(true);
Но в этом случае объект может быть нескольких типов.
Нормальный способ: Сделайте им общий интерфейс, например IPausable c с единственным методом setPause(true) (вместо этого метода лучше воспользоваться сеттером/геттером) и приводите к интерфейсу.
Плохой способ. Приводите к Object, ругаться перестанет.

mechman 03.03.2011 09:24

Точно. Освоился с интерфейсами, но ошибка осталась.
Вот код интерфейса:
Код AS3:

package pages 
{
        public interface IPausable
        {
                function setPause (p:Boolean) :void;
        }
}

Но FlashDevelop всё равно ругается на строчку:
Код AS3:

_tempNewPage.setPause(true);

Подскажите, пожалуйста, что не так?

cleptoman 03.03.2011 09:32

а в классах указали, что они реализуют этот интерфейс?

mechman 03.03.2011 09:42

Да.
Код AS3:

        public class GameLevelX extends Sprite implements IPausable{


cleptoman 03.03.2011 09:47

Код AS3:

(_tempNewPage as IPausable).setPause(true);


mechman 03.03.2011 09:52

В точку!
Заработало )
Благодарю!

in4core 03.03.2011 13:45

@cleptoman а вот поясните с фигали приводить к типу если implements все же сделал? поидее и без типа должно работать! странно

cleptoman 03.03.2011 13:59

а с фигали он все сделал, если _tempNewPage был объявлен как другой тип?

mechman 04.03.2011 01:52

Цитата:

@cleptoman а вот поясните с фигали приводить к типу если implements все же сделал? поидее и без типа должно работать!
Ошибка вываливается на этапе компиляции. Я так понял - компилятор, если не привести к типу, не знает есть ли метод setPause в указанном объекте. Поэтому и ругается.

in4core 04.03.2011 04:05

Извините, я подумал что реализация идет в классе, а так конечно тип требуется.

Psycho Tiger 04.03.2011 15:20

Цитата:

Сообщение от in4core (Сообщение 977932)
Извините, я подумал что реализация идет в классе, а так конечно тип требуется.

А при реализации в классе он не потребуется? Как можно реализовать интерфейс вне класса?


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

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