Когда расширяется EventDispatcher - PullRequest
2 голосов
/ 09 августа 2010

Простой вопрос. Мне было интересно, когда вы, ребята, расширяете EventDispatcher в вашем классе. Мне кажется, что до тех пор, пока у нас есть пакет событий импорта, мы можем отправлять событие без проблем ... Я видел, как иногда люди расширяют EventDispatcher в своем классе ... не знаю, почему ... кто-то хочет объяснить? Спасибо миллион ...

1 Ответ

8 голосов
/ 09 августа 2010

Думаю, вас может смутить тот факт, что многие объекты в AS3 расширяют EventDispatcher выше в дереве наследования, поскольку для отправки событий требуется только импортировать пакет flash.events.Например, многие классы DisplayObject расширяют EventDispatcher.Вот несколько примеров:

Shape » DisplayObject » EventDispatcher » Object

Sprite » DisplayObjectContainer » InteractiveObject » DisplayObject » EventDispatcher » Object

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

public class Clock extends EventDispatcher
{
     protected var _tick:uint;

     protected function run():void
     {
         if( _tick + 1 > 60 ) {
             _tick = 0;
         } else {
             _tick++;
         }
         dispatchEvent( new Event( Event.CHANGE ) );
     }

     public function getTick():uint { return _tick; }
}

Иногда важно, чтобы внутренние детали объекта были доступны только для чтения.В случае вышеприведенного примера, когда вызывается метод run(), класс Clock выполняет некоторую внутреннюю логику и затем отправляет событие, указывающее, что что-то изменилось.Любой класс, который прослушивает это событие, может затем вызвать открытый метод getTick(), чтобы узнать значение _tick.Это скрывает реализацию и защищает переменную _tick от изменения внешними классами и в то же время обеспечивает интерфейс, через который можно прочитать Clock.

...