我对AS3中的“全球”一词感到困惑。在我的主控制器类中,我已经定义了一个变量(myNum),我想在同一个包中的所有类.as文件中访问它。
//Controller class
package myApp
{
public var myNum:int = 24; //try to access myNum in mySprite class
public class Main extends Sprite
{
}
}
______________________________
//Object class
package myApp
{
public class mySprite extends Sprite
{
trace (myNum);
}
}
上面的代码返回以下错误:
5006: An ActionScript file can not have more than one externally visible definition
设置可在整个软件包范围内访问的全局变量列表的正确方法是什么?
答案 0 :(得分:2)
您的编译问题是因为
public var myNum:int = 24
需要在Main类中定义,而不是在其外部。
如果你想让它成为一个全局变量,一种方法是将它声明为静态:
package myApp
{
public class Main extends Sprite
{
public static var myNum:int = 24; //try to access myNum in mySprite class
}
}
然后从其他类中访问它:
import myApp.Main; //don't need this line if accessing from same package
trace(Main.myNum);
答案 1 :(得分:2)
静态变量可以实现这一点。
您可以将变量声明为internal static
,以便同一个包中的其他类可以使用它。或者您可以将其声明为public static
,以便项目中的所有类都可以使用它,即使它们位于不同的包中。
在下面的代码中,同一个包中的类可以访问myNum1
,而可以从任何地方访问myNum2
。
package myApp
{
public class Main extends Sprite
{
internal static var myNum1:int = 1;
public static var myNum2:int = 2;
}
}
来自同一包的访问示例:
package myApp
{
public class ClassInSamePackage
{
public function doSomething():void
{
trace(Main.myNum1); // traces 1
trace(Main.myNum2); // traces 2
}
}
}
来自其他包的访问示例:
package otherApp
{
import myApp;
public class ClassInDifferentPackage
{
public function doSomething():void
{
trace(Main.myNum1); // error!
trace(Main.myNum2); // traces 2
}
}
}
内部实际上是AS3中的默认访问修饰符,因此编写internal static var
与撰写static var
相同。但是,为了清楚起见,最好还是写internal static var
。
PS从您的示例中不清楚您是否已将这两个类放在一个或两个文件中。如果您只将它们放在一个文件中,请记住一个AS文件只能包含一个类。