AS3 внутренние и пользовательские пространства имен - PullRequest
3 голосов
/ 05 сентября 2011

У меня есть следующие пакеты:

sparkspark.engine

В пределах spark у меня есть класс SeCore;и в пределах spark.engine у меня есть SeStepper и SeKeyboard.

Я пытаюсь добиться, чтобы SeCore был единственным классом, который может создать экземпляр SeStepper или SeKeyboard.Этого можно достичь, переместив SeCore в пакет spark.engine и сделав два других класса internal, но я бы хотел иметь SeCore в пакете spark, если это возможно.

Я пытался создать свое собственное пространство имен, чтобы справиться с этим, например:

package spark.engine
{
    import spark.namespaces.spark_core;

    use namespace spark_core;

    spark_core class SeStepper extends SeObject
    {
        //
    }
}

Однако я получаю сообщение об ошибке:

1116: Пользователь-определенный атрибут namespace можно использовать только на верхнем уровне определения класса.

Есть ли какие-либо другие подходы, которые я могу использовать, чтобы добиться того, чего я добиваюсь?

Ответы [ 2 ]

1 голос
/ 06 сентября 2011

99% времени, помечать что-либо как «внутреннее» - плохая идея. Лучше иметь соглашение об именах для «запрещенных» классов и членов, и позволить разработчикам идти на свой страх и риск. Маркировка вещей как «внутренних» или «частных» - это то, что следует делать редко и с большой осторожностью.

Однако вы можете применить это поведение во время выполнения, используя свойство SeCore, предназначенное только для чтения, и проверяя его значение в SeStepper и SeKeyboard.

Ниже приведен псевдокод, давно не пользовался AS3.

В 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;
}

в SeStepper

public function SeStepper(core:SeCore){
  if (!core.CreateAuthorized) throw new Error("Only SeCore can do this");
}
0 голосов
/ 06 сентября 2011

Я не могу согласиться с ответом, я имею в виду, что обнародование информации - это способ пригласить хакеров. Я могу выполнять любые общедоступные функции в любой флэш-памяти, запущенной на моем компьютере, в любом контексте, который я хочу, я даже могу переопределить их выполнение в памяти, поскольку их легко найти, тогда как сделать что-то подобное с частными / внутренними функциями практически невозможно.

...