actionscript-3 - AS3 内部和自定义命名空间

标签 actionscript-3 namespaces encapsulation

我有以下软件包:
sparkspark.engine
spark 内我有课SeCore ;在 spark.engine 内我有 SeStepperSeKeyboard .

我想要实现的是拥有 SeCore作为唯一可以创建 SeStepper 实例的类或 SeKeyboard .这可以通过移动 SeCore 来实现进入spark.engine打包和制作其他两个类internal , 但我想要 SeCorespark如果可能的话,打包。

我尝试制作自己的命名空间来处理这个问题,如下所示:

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

    use namespace spark_core;

    spark_core class SeStepper extends SeObject
    {
        //
    }
}

但是我得到了错误:

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



我可以采取任何其他方法来实现我所追求的目标吗?

最佳答案

99% 的情况下,将任何内容标记为“内部”是个坏主意。最好为“禁区”类和成员制定命名约定,并允许开发人员自行承担风险。将事物标记为“内部”或“私有(private)”是应该很少做的事情,而且要深谋远虑。

但是,您可以在运行时通过使用 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");
}

关于actionscript-3 - AS3 内部和自定义命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7302874/

相关文章:

actionscript-3 - 8皇后问题

actionscript-3 - 如何检测 Adob​​e Flash 崩溃原因?

Flash AS3 Timer 极度关闭

python - 如何/应该如何在 Python/其他语言中管理跨包模块中的全局数据?

php - XPATH - 当内部节点命名空间不同时返回一个节点下的整个对象

c++ - 未封装意味着不可更改?

C 数据隐藏在结构中 : an explanation

c# - Xaml 不是破坏了我的封装吗?

actionscript-3 - 具有相同方法名的超接口(interface)和父类(super class)

c++ - 什么是内联命名空间?