一、命名空间的定义:
1、定义在独立的.as文件中;
e.g.1:
package npClass
{
public namespace morning;
}
{
public namespace morning;
}
e.g.2:
package npClass
{
public namespace noon;
}
{
public namespace noon;
}
e.g.3:
package npClass
{
public namespace night;
}
{
public namespace night;
}
2、定义在类的内部;
(见e.g.4蓝色)
3、定义在包的外面;
(见e.g.4红色)
e.g.4:
package npInner
{
import com.hexagonstar.util.debug.Debug;
public class InnerFoo
{
public namespace inMorning;
public namespace inNoon;
public namespace inNight;
public function InnerFoo()
{
/**
* 类内部引用命名空间
*/
/*
use namespace inMorning;
hello();*/
/*
inMorning::hello();*/
}
inMorning function hello():void
{
Debug.trace("Good inMorning!");
}
inNoon function hello():void
{
Debug.trace("Good inNoon!");
}
inNight function hello():void
{
Debug.trace("Good inNight!");
}
}
{
import com.hexagonstar.util.debug.Debug;
public class InnerFoo
{
public namespace inMorning;
public namespace inNoon;
public namespace inNight;
public function InnerFoo()
{
/**
* 类内部引用命名空间
*/
/*
use namespace inMorning;
hello();*/
/*
inMorning::hello();*/
}
inMorning function hello():void
{
Debug.trace("Good inMorning!");
}
inNoon function hello():void
{
Debug.trace("Good inNoon!");
}
inNight function hello():void
{
Debug.trace("Good inNight!");
}
}
}
/**
* 可以把命名空间定义在包外,使用起来跟定义在类的内部一样,不过不可以用public,非本as文件访问不到
* namespace inMorning;
* namespace inNoon;
* namespace inNight;
*/
/**
* 可以把命名空间定义在包外,使用起来跟定义在类的内部一样,不过不可以用public,非本as文件访问不到
* namespace inMorning;
* namespace inNoon;
* namespace inNight;
*/
定义的方法决定了使用的方法,但是从本质上来说,原理是一样的。
二、命名空间的应用:
1、应用内部定义的命名空间;
(见e.g.4紫色)
2、应用外部定义的(独立)命名空间;
跟内部不一样在于,如果不在同一个包中,要先import进来。
e.g.5:
package npClass
{
import npClass.morning;
import npClass.noon;
import npClass.night;
import com.hexagonstar.util.debug.Debug;
public class Foo
{
public function Foo()
{
}
morning function hello():void
{
Debug.trace("Good morning!");
}
noon function hello():void
{
Debug.trace("Good noon!");
}
night function hello():void
{
Debug.trace("Good night!");
}
}
{
import npClass.morning;
import npClass.noon;
import npClass.night;
import com.hexagonstar.util.debug.Debug;
public class Foo
{
public function Foo()
{
}
morning function hello():void
{
Debug.trace("Good morning!");
}
noon function hello():void
{
Debug.trace("Good noon!");
}
night function hello():void
{
Debug.trace("Good night!");
}
}
}
三、命名空间的引用:
package
{
import flash.display.Sprite;
import npClass.Foo;
/**
* 必須把命名空間也導入,才能打開命名空間,調用到該空間下的函數
*/
import npClass.morning;
import npClass.noon;
import npClass.night;
/**
* 写在类内部的命名空间
*/
import npInner.InnerFoo;
import com.hexagonstar.util.debug.Debug;
public class Main extends Sprite
{
public function Main()
{
init();
}
private function init():void
{
/**
* 独立.as定义的命名空间
{
import flash.display.Sprite;
import npClass.Foo;
/**
* 必須把命名空間也導入,才能打開命名空間,調用到該空間下的函數
*/
import npClass.morning;
import npClass.noon;
import npClass.night;
/**
* 写在类内部的命名空间
*/
import npInner.InnerFoo;
import com.hexagonstar.util.debug.Debug;
public class Main extends Sprite
{
public function Main()
{
init();
}
private function init():void
{
/**
* 独立.as定义的命名空间
*/
//var kk:Foo = new Foo();
/**
* 用use namespace打開命名空間
*/
/*
use namespace noon;
kk.hello();*/
/**
* 兩個命名空間不能同時打開,打開就會報錯,因為命名空間打開命令會提前執行
* 相當于如此:
* use namespace noon;
* use namespace night;
* kk.hello();
* kk.hello();
* 下面的命令他就不知道要執行哪個命名空間
*/
/*use namespace noon;
kk.hello();
use namespace night;
kk.hello();*/
/**
* 用開啟命名空間符調用
*/
/*kk.noon::hello();
kk.morning::hello();
kk.night::hello();*/
/**
* 定義在類里面的命名空間
*/
//var ii:InnerFoo = new InnerFoo();
/**
* 用开启命名空间符调用
*/
/*var tp:Namespace = InnerFoo.inMorning;
ii.tp::hello();*/
/**
* 用use namespace打开不行,不能这样做
*/
/*
use namespace InnerFoo.inMorning;
ii.hello();
*/
}
}
}
//var kk:Foo = new Foo();
/**
* 用use namespace打開命名空間
*/
/*
use namespace noon;
kk.hello();*/
/**
* 兩個命名空間不能同時打開,打開就會報錯,因為命名空間打開命令會提前執行
* 相當于如此:
* use namespace noon;
* use namespace night;
* kk.hello();
* kk.hello();
* 下面的命令他就不知道要執行哪個命名空間
*/
/*use namespace noon;
kk.hello();
use namespace night;
kk.hello();*/
/**
* 用開啟命名空間符調用
*/
/*kk.noon::hello();
kk.morning::hello();
kk.night::hello();*/
/**
* 定義在類里面的命名空間
*/
//var ii:InnerFoo = new InnerFoo();
/**
* 用开启命名空间符调用
*/
/*var tp:Namespace = InnerFoo.inMorning;
ii.tp::hello();*/
/**
* 用use namespace打开不行,不能这样做
*/
/*
use namespace InnerFoo.inMorning;
ii.hello();
*/
}
}
}
Aucun commentaire:
Enregistrer un commentaire