2014-03-05 28 views
0

我正在使用常規的flash.utils.Dictionary作爲源對象的詞典,而且自定義實現flos.utils.Dictionary具有擴展功能,如檢索詞典的長度,並在其值設置爲undefined時自動刪除鍵。「flash」在AS3中沒有定義?

編譯過程中我得到這些錯誤:

  • 「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() 
     { 
     } 

FYI,這個內部類用於在同一個文件作爲綁定類中聲明的私人類,包之外,文件的底部。當我嘗試調用Binding類的靜態成員時,我得到了一個運行時錯誤#1007「在Binding $ iinit()的非構造函數上試圖實例化」。所有的類都有構造函數,我無法弄清楚什麼是錯誤的,所以我將這些類移動到了單獨的文件中,這就是我碰到這些編譯錯誤的原因。

+0

我認爲,通過聲明具有完全限定名稱的變量,我不必使用顯式導入語句,但顯然我是這樣做的。我不想爲內置字典類使用import語句的原因是因爲我不想在整個類的其餘部分對Dictionary進行模糊引用,我希望使用Dictionary的實現。我可能會被強制爲兩者都顯式導入,並在整個類中使用完全限定名稱以避免含糊不清的引用。 使用完全限定名稱時,我不需要導入。 – Triynko

回答

1

看來,進口一類是在AS3絕對必需的,不像AS2,如果你想使用它,除非它在同一個包中的類的聲明中,你要使用它:Packages and Namespaces - Importing Packages

您必須爲類本身或包含它的包提供導入語句。一:

  • 進口flash.utils.Dictionary
  • 進口flash.utils。*;

這意味着我看到的行爲是由設計。當外部包中的兩個類被導入並具有相同的名稱時,儘管存在維護困難,但無法使用完全限定名來消除它們在所有類中使用的名稱的歧義。

我想,我在想AS3的import聲明像C#的using聲明,試圖讓一個字典中的默認避免使用最頻繁引用的類完全合格的名稱,而只使用完全合格的名稱爲其他一兩行。在AS3中,您必須導入兩者,處理不明確的引用,並在對兩個類的每個引用中使用完全限定的名稱。

+0

避免使用'flash.utils。*'導入。根據編譯類型的不同,它可能包含來自該包的所有*類,而不僅僅是所需的類。只是增加了最終的文件大小 –