※ 命名空間可控制方法和屬性的能見度。
※ 屬性和方法的名稱永遠包含識別名稱和命名空間。只要定義之前未有命名空間特質,預設就會以internal命名空間加以限定。(只有在相同套件內的呼叫者才看得見)
※ 使用命名空間三個基本步驟:
(A) 定義命名空間:使用 namespace 關鍵字來定義命名空間
//使用public讓其它套件的程式碼獲取namespaceExample命名空間的可見度
package example{
public namespace namespaceExample;
}
(B) 套用命名空間:
namespaceExample function doJob():void{}
(C) 參考命名空間:
- 用 use namespace 指令參考命名空間
use namespace namespaceExample;
var counterAddition:CounterAddition = new CounterAddition();
counterAddition.doJob(1,2);
trace(counterAddition.getAnswer);
- 或 使用名稱修飾語 (::) 標點符號
var counterAddition:CounterAddition = new CounterAddition();
counterAddition.namespaceExample::doJob(1,2);
trace(counterAddition.namespaceExample::getAnswer);
※ 命名空間namespace小小實例
當public、private、protected、internal四個存取控制指定子的存取權限不符合使用,比如說有一些「方法」分散在不同套件的類別裡,若想讓所有套件都可以存取,但又不想讓這些方法變成公用方法,此時就可透過建立命名空間namespace,做為自定義的特殊存取控制指定子。以下例子將不同套件內的類別方法,整合到相同的命名空間中,透過參照命名空間的use namespace陳述式,或名稱修飾語 (::) 標點符號可調用這些方法。
下圖為檔案結構:
1000718_namespaceT1.fla
//namespaceExample.as
package example{
public namespace namespaceExample;
}
//CounterAddition.as
package example.addition{
import example.namespaceExample;
public class CounterAddition {
public var answer:Number;
public function CounterAddition() {
return;
}
namespaceExample function doJob(_a:Number,_b:Number):void{
this.answer = _a + _b;
return;
}
namespaceExample function get getAnswer():Number{
return this.answer;
}
}
}
CounterSubtraction.as
package example.subtraction {
import example.namespaceExample;
public class CounterSubtraction {
public var answer:Number;
public function CounterSubtraction() {
return;
}
namespaceExample function doJob(_a:Number,_b:Number):void{
this.answer = _a - _b;
return;
}
namespaceExample function get getAnswer():Number{
return this.answer;
}
}
}
NamespaceT1_1000718.as
package {
import flash.display.MovieClip;
import example.namespaceExample;
import example.addition.CounterAddition;
import example.subtraction.CounterSubtraction;
public class NamespaceT1_1000718 extends MovieClip {
public function NamespaceT1_1000718() {
var counterAddition:CounterAddition = new CounterAddition();
counterAddition.namespaceExample::doJob(1,2);
trace(counterAddition.namespaceExample::getAnswer);
var counterSubtraction:CounterSubtraction = new CounterSubtraction();
counterSubtraction.namespaceExample::doJob(3,1);
trace(counterSubtraction.namespaceExample::getAnswer);
/*use namespace namespaceExample;
var counterAddition:CounterAddition = new CounterAddition();
counterAddition.doJob(1,2);
trace(counterAddition.getAnswer);
var counterSubtraction:CounterSubtraction = new CounterSubtraction();
counterSubtraction.doJob(3,1);
trace(counterSubtraction.getAnswer);*/
return;
}
}
}
沒有留言:
張貼留言