Apache flex mx.core.FlexModuleFactory中FlexModuleFactory的非法重写

Apache flex mx.core.FlexModuleFactory中FlexModuleFactory的非法重写,apache-flex,module,flex4.5,Apache Flex,Module,Flex4.5,我有一个Flex 4.5.1应用程序,它加载另一个swf文件(作为一个在Flex 3.2 SDK中编写和编译的模块) 在加载3.2 swf文件时,我得到了非法覆盖错误(见标题) 这是允许的还是加载的模块必须用相同的版本编译 如果是,你能解释一下原因吗 当类错误地从其父类重写函数时,会发生非法重写错误。例如,如果您扩展了Sprite类并创建了以下函数: override public function addChild(value:Number):DisplayObject { ....

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

在加载3.2 swf文件时,我得到了非法覆盖错误(见标题)

这是允许的还是加载的模块必须用相同的版本编译


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

当类错误地从其父类重写函数时,会发生非法重写错误。例如,如果您扩展了Sprite类并创建了以下函数:

override public function addChild(value:Number):DisplayObject
{
    ....
}
这是非法重写,因为方法签名不同(它需要接受DisplayObject,而不是数字)

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


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

谢谢您的回答。我发现这个线程基本上是说,可以加载一个模块,该模块的编写版本小于或等于主应用程序编译所依据的sdk版本。这是真的吗?是的,但您必须对模块进行沙箱处理,以避免当前遇到的错误。这是通过将它们加载到它们自己的应用程序域中来完成的。@shenetheat:您确定模块也是这样吗?下面的线程似乎在说子应用程序可以是不同的版本,但模块不能。可能不会,我没有足够的理由肯定地说。从-
马歇尔计划的本质。现在,每个表单必须是SWFLoader加载的单独应用程序,而不是ModuleManager加载的作为模块的表单(模块需要类级相互依赖)