我使用常规flash.utils.Dictionary
作为源对象的字典,以及自定义实现flos.utils.Dictionary
,它具有扩展功能,例如检索字典的长度并在设置值时自动删除键未定义。
我在编译期间遇到这些错误:
以下代码中声明的每个私有变量都会发生这三个错误。我正在导入我的自定义词典,因此我在定位内置词典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()”。所有类都有构造函数,我无法弄清楚出了什么问题,所以我将这些类移到了单独的文件中,而当我遇到这些编译错误时就是这样。
答案 0 :(得分:1)
似乎在AS3中绝对需要导入类,与AS2不同,如果你想使用它,除非它在与你尝试使用它的类相同的包中声明:Packages and Namespaces - Importing Packages < / p>
您必须拥有类本身或包含它的包的import语句。其中之一:
这意味着我所看到的行为是设计的。当导入外部包中的两个类并且具有相同的名称时,无论使用哪个名称在整个类中使用,都无法使用完全限定名称来消除它们的歧义,尽管存在维护困难。
我想我正在考虑AS3的import
语句,就像C#的using
语句一样,试图使一个字典成为默认值,以避免在最常被引用的类上使用完全限定名,而只是使用一行或两行中其他类的完全限定名称。在AS3中,您必须导入两者,处理不明确的引用,并在每个类的引用上使用完全限定名称。