2011-09-05 6 views
3

나는 다음과 같은 패키지가 : I 클래스 SeCorespark내부 AS3 및 사용자 정의 네임 스페이스

spark
        spark.engine

을; spark.engine 내에 SeStepperSeKeyboard이 있습니다.

SeCoreSeStepper 또는 SeKeyboard의 인스턴스를 만들 수있는 유일한 클래스입니다. 이것은 SeCorespark.engine 패키지로 이동하고 다른 두 클래스를 internal으로 만들면 가능하지만 가능하면 spark 패키지에 SeCore을 갖고 싶습니다.

난 내 자신의 네임 스페이스과 같이이를 처리 할 수있게 시도했다 :

1116: A user-defined namespace attribute can only be used at the top level of a class definition.

내가 무엇을 달성하기 위해 취할 수있는 다른 방법이 있습니까 :
package spark.engine 
{ 
    import spark.namespaces.spark_core; 

    use namespace spark_core; 

    spark_core class SeStepper extends SeObject 
    { 
     // 
    } 
} 

그러나 나는 오류 나는?

+0

런타임에 확인 중입니까, 아니면 컴파일시에 하시겠습니까? – RIAstar

+0

RIAstar, 컴파일 시간이 더 좋지만 런타임 오류는 그냥 오류가 발생할 수 있기 때문에 괜찮습니다. @ Jevgenij Dmitrijev 귀하의 의견은 무엇과 관련이 있습니까? – Marty

답변

1

시간의 99 %는 '내부'로 표시하는 것은 좋지 않습니다. '오프 리밋 (off-limit)'클래스와 멤버에 대한 명명 규칙을 사용하는 것이 낫고, 개발자는 자신의 위험에 노출 될 수 있습니다. '사내'또는 '사적'으로 표시하는 것은 드물게 수행되어야하며 큰 사전 고려 사항이 있어야합니다.

그러나 SeCore에서 읽기 전용 속성을 사용하고 SeStepper 및 SeKeyboard에서 해당 값을 확인하면이 동작을 런타임에 적용 할 수 있습니다.

다음은 의사 코드이며 잠시 동안 AS3을 사용하지 않았습니다. SeStepper

public function SeStepper(core:SeCore){ 
    if (!core.CreateAuthorized) throw new Error("Only SeCore can do this"); 
} 
+0

첫 번째 메모 다시 : 기본적으로 SeCore 인스턴스를 만드는 엔진에서 작업하고 있습니다 (생성자에서 스테퍼와 키보드와 같은 다른 클래스의 인스턴스를 만듭니다). 이러한 클래스에 대한 액세스는 core.keyboard 등을 통해 제공되지만, 사람들이 스스로 인스턴스를 만들지 못하게해야합니다. 다행히도 코딩 스타일이 이상하거나 문제가 있다는 제안을 없애기를 바랍니다. 물론 명명 규칙을 사용할 수는 있지만 혼란을 피하기 위해 가능한 한 많이 액세스해서는 안되는 것을 잠그려고합니다. – Marty

0

내가 일을 공개 할 말은, 대답에 동의 할 수있는 SeCore

private var _createAuthorized = false; 
public function get CreateAuthorized():boolean {return _createAuthorized;} 

private function createSeStepper(){ 
    _createAuthorized = true; 
    var obj = new SeStepper(this) 
    _createAuthorized = false; 
    return obj; 
} 

에서

해커를 초대하는 방법입니다. 내 컴퓨터에서 실행중인 모든 공용 함수를 원하는 컨텍스트에서 실행할 수 있습니다. 찾기 쉽기 때문에 실행을 메모리에서 재정의 할 수 있습니다. 반면 개인/내부 함수로 수행하는 것은 거의 불가능합니다.

+0

귀하의 의견은 제가 염두에 두었던 것입니다. – Marty