AS3中没有定义“flash”?

时间:2014-03-05 18:30:07

标签: actionscript-3 compiler-errors

我使用常规flash.utils.Dictionary作为源对象的字典,以及自定义实现flos.utils.Dictionary,它具有扩展功能,例如检索字典的长度并在设置值时自动删除键未定义。

我在编译期间遇到这些错误:

  • “1046:未找到类型或不是编译时常量:字典。”
  • “1120:访问未定义的属性flash。”
  • “1120:访问未定义的属性flash。”

以下代码中声明的每个私有变量都会发生这三个错误。我正在导入我的自定义词典,因此我在定位内置词典flash.utils.Dictionary时使用完全限定名称,但似乎认为flash命名空间未定义。

package flos.system.binding 
{
    import flos.utils.Dictionary;

    internal class BindingDictionary
    {
        private var targetBindings:flash.utils.Dictionary = new flash.utils.Dictionary(); //Dictionary of targets, containing dictionaries of bound target properties, containing the source/propertyName pair that the target is bound to.
        private var sourceBindings:flash.utils.Dictionary = new flash.utils.Dictionary(); //Dictionary of sources, containing Dictionaries of bound source properties, containing Binding instances that determine which targets/properties the source property is bound to.

        public function BindingDictionary()
        {
        }

仅供参考,这个内部类曾经是在文件底部的包外面与Bindings类在同一文件中声明的私有类。当我试图调用Binding类的静态成员时,我收到了运行时错误#1007“在非构造函数上尝试实例化。在Binding $ iinit()”。所有类都有构造函数,我无法弄清楚出了什么问题,所以我将这些类移到了单独的文件中,而当我遇到这些编译错误时就是这样。

1 个答案:

答案 0 :(得分:1)

似乎在AS3中绝对需要导入类,与AS2不同,如果你想使用它,除非它在与你尝试使用它的类相同的包中声明:Packages and Namespaces - Importing Packages < / p>

您必须拥有类本身或包含它的包的import语句。其中之一:

  • import flash.utils.Dictionary
  • import flash.utils。*;

这意味着我所看到的行为是设计的。当导入外部包中的两个类并且具有相同的名称时,无论使用哪个名称在整个类中使用,都无法使用完全限定名称来消除它们的歧义,尽管存在维护困难。

我想我正在考虑AS3的import语句,就像C#的using语句一样,试图使一个字典成为默认值,以避免在最常被引用的类上使用完全限定名,而只是使用一行或两行中其他类的完全限定名称。在AS3中,您必须导入两者,处理不明确的引用,并在每个类的引用上使用完全限定名称。