2010-04-26 5 views
0

AS3에서는 "전역"이라는 용어와 혼동합니다. 내 메인 컨트롤러 클래스 내에서 동일한 패키지 내의 모든 클래스 .as 파일에 액세스하려는 변수 (myNum)를 정의했습니다.AS3 : 전역 변수 액세스

5006: An ActionScript file can not have more than one externally visible definition 

패키지의 전체 범위에 걸쳐 액세스 할 수있는 전역 변수의 목록을 설정하는 적절한 방법은 무엇입니까 :

//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); 
    } 
} 

위의 코드는 다음과 같은 오류를 반환?

public var myNum:int = 24 

이 아닌 밖에서의 메인 클래스 내에서 정의 될 필요가 있기 때문에

답변

2

정적 변수가이를 수행 할 수 있습니다.

동일한 패키지의 다른 클래스에서 사용할 수 있도록 변수를 internal static으로 선언 할 수 있습니다. 또는 다른 패키지에 있어도 프로젝트의 모든 클래스에서 사용할 수 있도록 public static으로 선언 할 수 있습니다.

아래 코드에서 myNum1은 같은 패키지의 클래스에서 액세스 할 수 있지만 myNum2은 어디서나 액세스 할 수 있습니다. 다른 패키지에서 접근

package myApp 
{ 
    public class ClassInSamePackage 
    { 
     public function doSomething():void 
     { 
      trace(Main.myNum1); // traces 1 
      trace(Main.myNum2); // traces 2 
     } 
    } 
} 

예 : 동일한 패키지에서 접근

package myApp 
{ 
    public class Main extends Sprite 
    { 
     internal static var myNum1:int = 1; 
     public static var myNum2:int = 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을 작성하는 것이 좋습니다.

추신 : 귀하의 예에서 두 클래스를 하나 또는 두 개의 파일에 배치했는지 여부는 분명하지 않습니다. 두 파일을 하나의 파일에만 둘 경우 하나의 AS 파일에 하나의 클래스 만 포함될 수 있습니다.

2

귀하의 컴파일 문제입니다. 과 같이 다른 클래스에서 액세스 다음

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);