На самом деле это продолжение
старого топика. Но старый топик стал таким запутанным, что я решил подвести итог и начать новый топик.
Итог:
Пример: Человек может купить собаку. При этом он посылает кастомное событие, в котором лежит собака.

Код AS3:
package
{
[Event(name = "iBoughtDog", type = "ManEvents")]
public class Main
{
public function Main()
{
var man:Man = new Man();
man.addEventListener(ManEvent.I_BOUGHT_DOG, listener);
}
private function listener( сноска* ):void
{
}
}
}
package
{
[Event(name = "iBoughtDog", type = "ManEvent")]
public class Man
{
public function Man()
{
}
private function someFunction():void
{
dispatchEvent( new TransportEvent(dog, ManEvent.I_BOUGHT_DOG) );
}
}
}
package
{
public class ManEvent
{
static public const I_BOUGHT_DOG:String = "iBoughtDog";
}
}
package
{
import flash.events.Event;
public class TransportEvent extends Event
{
public function TransportEvent(cargo:Object, type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
_cargo = cargo;
}
public function get cargo():Object { return _cargo; }
private var _cargo:Object;
}
}
Проблема в том, что мы ожидаем, что в слушатель события придет экземпляр класса ManEvent, а придет туда TransportEvent.
Для решения проблемы можно отнаследовать ManEvent от TransportEvent и посылать в слушатель именно ManEvent.

Код AS3:
package
{
public class ManEvent extends TransportEvent
{
static public const I_BOUGHT_DOG:String = "iBoughtDog";
public function ManEvent(cargo:Object, type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(cargo, type, bubbles, cancelable);
}
}
}
Но наследование выглядит глупо - ведь мы никак не расширили базовый класс.