AS3:访问全局变量

时间:2010-04-26 16:52:28

标签: actionscript-3 global-variables packages

我对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

设置可在整个软件包范围内访问的全局变量列表的正确方法是什么?

2 个答案:

答案 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文件只能包含一个类。