我有以下软件包:spark
spark.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: 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/