在mx.core.FlexModuleFactory中非法覆盖FlexModuleFactory

时间:2012-01-16 17:00:10

标签: flex module flex4.5

我有一个Flex 4.5.1应用程序,它加载另一个swf文件(作为在Flex 3.2 SDK中编写和编译的模块)。

加载3.2 swf文件时,我收到非法覆盖错误(请参阅标题)。

这是否允许或者加载的模块必须使用相同的版本进行编译?

如果是这样,你能解释一下原因吗?

1 个答案:

答案 0 :(得分:3)

当类错误地从其父级重写函数时,会发生IllegalOverride错误。例如,如果扩展了Sprite类并创建了这个函数:

override public function addChild(value:Number):DisplayObject
{
    ....
}

这是非法覆盖,因为方法签名不相同(它需要接受DisplayObject,而不是数字)。

FlexModuleFactory最有可能在3.2和4.5之间变化。如果在父SWF中使用FlexModuleFactory,则其定义存在于ApplicationDomain中。如果将子SWF加载到同一ApplicationDomain中,并且该子SWF包含扩展FlexModuleFactory的类,那么它将使用ApplicationDomain中已存在的4.5版本,而不是编译子版本的3.2版本。

您可以通过将子SWF加载到新的ApplicationDomain来解决此问题,这意味着它不会共享父SWF中的任何类定义。