2010-06-23 29 views
1

在AS3中,我們爲什麼要將我們的導入語句放在包裝聲明中,而不是在類別聲明中?爲什麼要在包中放入import語句?

這是一個典型的(但相當無意義)AS3類:

package my.foo.package 
{ 
    import flash.display.MovieClip; 
    import flash.events.Event; 
    import flash.events.TimerEvent; 
    import flash.utils.Timer; 

    public class FooClass extends MovieClip 
    { 
     public static const EVENT_TIME_UP:String = 'timeUpEvent'; 

     public function FooClass() 
     { 
      var timer:Timer = new Timer(2000, 1); 
      timer.addEventListener(TimerEvent.TIMER, timerHandler); 
      timer.start(); 
     } 

     private function timerHandler(e:TimerEvent):void 
     { 
      dispatchEvent(new Event(FooClass.EVENT_TIME_UP)); 
     } 
    } 
} 

但爲什麼所有的import語句的意思走,一路在那裏,外面的課嗎?當我將導入移動到像下面這樣的類聲明中時,該類很好地工作。

package my.foo.package 
{ 
    import flash.display.MovieClip; 

    public class FooClass extends MovieClip 
    { 
     import flash.events.Event; 
     import flash.events.TimerEvent; 
     import flash.utils.Timer; 

     public static const EVENT_TIME_UP:String = 'timeUpEvent'; 

     public function FooClass() 
     { 
      var timer:Timer = new Timer(2000, 1); 
      timer.addEventListener(TimerEvent.TIMER, timerHandler); 
      timer.start(); 
     } 

     private function timerHandler(e:TimerEvent):void 
     { 
      dispatchEvent(new Event(FooClass.EVENT_TIME_UP)); 
     } 
    } 
} 

它只是需要在包中的MovieClip導入,因爲我的類正在擴展它。

Adobe AS3 coding conventions這沒什麼有用的。

那麼,爲什麼我們把進口放在包裏,而不是實際使用它們的類。該包是不是使用導入的類是它?爲什麼如果我將輸入移動到類中,它仍然有效?

回答

1

這只是一個正在使用的約定,所以有一箇中心位置可以查看所有導入。比方說,我們將您的邏輯推向下一個極端,並在我們聲明的每個變量之前在行上放置一條導入語句(順便編譯一下)。無論是故意還是意外,我們都會不必要地重複進口陳述。另外,有人想要查看給定文件的依賴關係,必須掃描整個文件,而不是隻看文件的頂部。將輸入放入類聲明中的意思並不是那麼瘋狂,但是如果文件聲明瞭多個類,則仍然會導致散佈在整個文件中的導入問題(例如內部使用的類,例如)。

+0

除了最後加了圓括號的部分之外,還要同意這篇文章 - 您應該再次爲內部使用的類(包語句塊之外的私人類)導入類。包塊內的導入語句在包塊外不可見。 – Amarghosh 2010-06-24 04:59:44

相關問題