2

簡単な質問..クラスで EventDispatcher をいつ拡張するのか疑問に思っていました。インポート イベント パッケージがある限り、dispatchEvent を問題なく実行できるように思えます....クラスで EventDispatcher を拡張する人を見たことがあります...理由がわからない...誰か説明したいですか? どうもありがとう...

4

1 に答える 1

8

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クラスは何らかの内部ロジックを実行し、何かが変更されたことを示すイベントを送出します。そのイベントをリッスンしているクラスは、 publicgetTick()メソッドを呼び出して の値を見つけることができます_tick。これにより、実装が隠蔽され、_tick変数が外部クラスによって変更されないように保護されると同時に、 をClock読み取ることができるインターフェイスが提供されます。

于 2010-08-08T21:37:08.793 に答える