次のコードが与えられます:
クラスCEvent:
public class CEvent extends Event
{
public static const TYPE:String = "cEvent";
private var m_strCode:String;
public function get code():String
{
return m_strCode;
}
public function CEvent(pCode:String, bubbles:Boolean=false,
cancelable:Boolean=false)
{
super(TYPE, bubbles, cancelable);
m_strCode = pCode;
}
}
クラスA:
dispatchEvent(new CEvent(MY_CONST))
クラスB:
m_a = new A();
m_a.addEventListener(CEvent.TYPE, onCEvent);
.
.
.
private function onCEvent(pEvent:CEvent):void
{
switch (pEvent.code)
{
case A.MY_CONST:
dispatchEvent(pEvent);
}
}
クラスC:
m_b = new B();
m_b.addEventListener(CEvent.TYPE, onCEvent);
.
.
.
private function onCEvent(pEvent:CEvent):void
{ // breaks right here
}
クラスAから最初にディスパッチした後、クラスCで破損すると、このエラーが発生します。
Error #1034: Type Coercion failed: cannot convert flash.events::Event@9861089 to
<path>.CEvent.
これはあまり意味がないようで、継承の仕組みに完全に反しているようです。AdobeのdispatchEvent()の実装に、継承によって追加されたものをすべて処理して削除し、「通常の」イベントインスタンスをディスパッチするコードがあったとしても、CではなくクラスBで破損するはずです。
誰か説明してもらえますか?ありがとう。
編集:ちなみに、これを行うためにクラスBのコードを変更すると、代わりにすべてが正常に機能します。
dispatchEvent(new CEvent(pEvent.code));
私はまだ問題が何であるかを理解する必要があります。ありがとう。